美文网首页
理解JS中的call和apply

理解JS中的call和apply

作者: 佳勋学长 | 来源:发表于2017-03-14 20:10 被阅读0次

    存在即合理,首先了解下callapply存在的作用。

    JS中函数存在 定义时上下文运行时上下文,并且上文是可以动态改变的。

    callapply 都是为了改变函数运行时的context(即上下文)而存在的。

    换句话说,就是为了改变函数体内部this的指向。

    定义一个宠物对象,其拥有words属性和say函数:

    var pet = {
      words:'...',
      say:function(){
          console.log('Say:' + this.words)
      }
    }
    pet.say() //"Say: ..."
    

    每个宠物有不同的叫声,如果我们定义一个对象:

    var cat = {
        words:'miao'
    }
    

    在不重写say方法的条件下,我们希望通过pet对象使它能拥有自己的叫声miao,只需要利用call或者apply改变pet里面的this的指向,将this指向cat即可:

    pet.say.call(cat) //"Say:miao"
    pet.say.apply(cat) //"Say:miao"
    

    二者作用一样,唯一的区别是接收参数的形式不一样:

    obj.call(thisObj, arg1, arg2, ...) //接受的是连续参数。
    obj.apply(thisObj, [arg1, arg2, ...]) //接受的是数组参数
    

    通过callapply,可以实现对象的继承:

    var parent = function{
        this.name = 'pjx'
        this.sex = 'boy' 
    }
    var child = {};
    console.log(child);//{} 
    
    parent.call(child);
    console.log(child); //{name: "pjx", sex: 'boy'}

    相关文章

      网友评论

          本文标题:理解JS中的call和apply

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