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