apply call 一看就明白

用使用call和apply就要明白以下两个问题。
1、 什么时候需要使用call或者apply
2、 call 和 apply 如何使用

先回答第一个问题,什么场景下用呢?
function person(name){
     
    this.name = name;
    getName = function(){
       return this.name;
    }
}


function dog(name){


  this.name = name;
}
如果dog也需要getName这个功能,可以将person的getName功能拷贝过来,但更好的方法是用call或者apply。
call 和 apply的使用场景是:将一个函数的对象上下文从初始的上下文改变为由 参数指定的新对象。这样即使dog没有定义getName也可以在对象上使用这个功能了。


第二个问题,如何使用呢?
for example
var p = new person("li");
var d = new dog('wa');
var name = p.getName.call(d);//name = 'wa';


call 的调用方法

call(thisObj,arg1, arg2,..,argN)


参数
thisObj
可选项。将被用作当前对象的对象。


arg1, arg2,  , argN
可选项。将被传递方法参数序列。


apply 的调用方法

apply(thisObj,[arg1, arg2,..,argN])

call 和 apply 作用一样,只是第二个参数不一样。call是参数一个个传进去,而apply则将参数都放在一个数组里面

你可能感兴趣的:(apply call 一看就明白)