call和apply

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后面参数为数组

你可能感兴趣的:(call和apply)