美文网首页
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