call和apply都是在方法执行时候替换作用域 ,也就是this
this谁调用他,this就执行谁
var a = 1;
let obj = {
a : 2,
b: function(){
console.log(this.a);
}
}
console.log(obj.b())
var dd = obj.b;
dd();
再obj.b()其中 this指向obj, 可以看到这块是obj调用函数b,输出为2
在 dd函数中 this指向window ,dd() 相当于window.dd(),this指向window,输出为1
这时候,如果想调用dd函数中,作用域为obj时候,call和apply第一个参数都为当前作用域执行,如果为null或者是undefined,则指向window
dd.call(obj) 2
dd.apply(obj) 2
dd.apply(null) 1
dd.apply(null) 1
或者此处也可以使用bind,注意bind绑定对象后返回值是一个函数
call后面参数为多个
apply后面参数为数组
网友评论