call()
- 例子:
var obj = {"num":2};
var addToThis = function(a,b,c){
return this.num + a + b + c;
};
var result = addToThis.call(obj,1,2,3);
console.log(result);
// 2 + 1 + 2 + 3
//8
- 解释
对于上面的例子,call()方法让对象obj使用了addToThis方法,一般格式为fun.call(thisArg, arg1, arg2 .....)
,意思就是说让thisArg可以使用fun方法,后面的arg1,arg2…就是传入fun方法的参数
apply()
-例子
var obj = {"num":2};
var addToThis = function(a,b,c){
return this.num + a + b + c;
};
var array = [1,2,3];
var result = addToThis.apply(obj,array);
console.log(result);
// 2 + 1 + 2 + 3
//8
- 解释
apply()方法和call()方法达成的效果一样,只不过传入其中的参数略有不同fun.apply(obj,[arg1,arg2....])
,只有两个参数,第二个参数为数组,用来存储需要传入fun方法的参数
bind()
- 例子
var obj = {"num":2};
var addToThis = function(a,b,c){
return this.num + a + b + c;
};
var result = addToThis.bind(obj);
console.log(result(1,2,3));
//8
- 解释
bind()方法会产生一个新的函数,函数中的this关键字已经被赋过值了。 - 进一步剖析
执行console.dir(result)
,得到的结果如下
注意其中的[[BoundThis]]
,其为obj对象