关于js中call(), apply(), bind()简单的解释

时间:2023-02-15 18:40:15

YouTube教学视频笔记

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),得到的结果如下
    关于js中call(), apply(), bind()简单的解释
    注意其中的 [[BoundThis]],其为obj对象