--- title: 实现call方法 date: 2018-4-14 00:56:44 tags: - JavaScript - prototype categories: - JavaScript --- > call方法在使用一个指定的this值和若干个指定参数值的前提下调用某个函数 常规调用方式 ```javascript var obj = { name : "Sookie", func : function(msg) { console.log(this.name + " : " + msg); } } var fn1 = obj.func; fn1.call(obj, "Hello"); ``` 现在如果要尝试实现一个call方法 #### 雏形 ```javascript Function.prototype.call2 = function(context) { context.fn = this; context.fn(); delete context.fn; } ``` 初步实现了不传参情况下的函数调用 但是还有不少缺陷 #### 对参数的处理 由于需要处理实际参数 , 而且实际参数的数量又是不确定的 所以我们可以考虑使用`eval`来执行这个函数 ```javascript Function.prototype.call2 = function(context) { context.fn = this; var args = []; for(let i=1 ; i