美文网首页
call和apply

call和apply

作者: Allan要做活神仙 | 来源:发表于2017-03-17 16:36 被阅读46次

相同点:

作用都是为了改变函数运行时上下文而存在的。
即改变函数体内部this的指向。
"说白点,a有xx方法,b没有。b可以问a借!"

不同点:

接受参数方式不一样。

call接受的是连续参数,apply接受的是数组参数。
A.call(this, a,b,c,d)
A.apply(this, [a,b,c,d])

继承使用:

通过call和apply,我们可以实现对象继承

var Parent = function(){
    this.name = "xsf";
    this.age = 22;
}

var child = {};
Parent.call(child);          // child向Parent借
console.log(child);

调用父构造函数:

apply

var arr1 = [1,2];
var arr2 = [3,4];
Array.prototype.push.apply(arr1,arr2);  // [1,2,3,4]

把arr2 push进arr1

相当于:

arr2.forEach(function(value){
  arr1.push(value);
)

call

var arr1 = [1,2];
var arr2 = [3,4];
var arr3 = [2,4];
Array.prototype.push.call(arr1,arr3,arr3); // [1,2,[3,4],[2,4]]不会拆分数组元素

相关文章

网友评论

      本文标题:call和apply

      本文链接:https://www.haomeiwen.com/subject/mcnenttx.html