美文网首页
JavaScript爬坑之:apply()与call()的用法和

JavaScript爬坑之:apply()与call()的用法和

作者: hammercui | 来源:发表于2017-05-12 18:24 被阅读0次

apply与call都是为了动态改变this而出现的

首先补充知识点:

this

javascript的一个关键字,代表函数运行时,自动生成的一个内部对象。随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

  • 在页面中,this可以表示全局对象,方法的调用对象。
  • nodejs中,不太一样,一个js文件就是一个module.exports,this一般指这个module.exports,或者内部方法的调用对象

apply与call

前面已经说了applce call是函数对象的方法,允许切换函数执行的上下文环境(context),也就是this在函数中绑定的对象,
区别是:

Function.apply(object,[ ]) //后面传参数以数组的形式

Function.call(object,...params) //后面传参数分开传输的

举个例子

function Cat(hello){
    this.name = "cat";
    this.msg = "i am cat";
    this.say = function(){
      alert(this.name + " say :" + this.msg);
  }
}

var cat = new Cat("i am a cat");
cat.say(); //cat say: i am a cat 

var cat = new Cat("i am a cat");
cat.say(); //cat say: i am a cat 
var dog = {name:"dog",msg:"i am a dog"};
cat.say.apply(dog); // dog say :i am a dog

新建一个catcat有方法say,但是dog没有方法say,使用apply就是把执行方法saythis或者叫上下文,变成了dog,这时this.namethis.msg就是dognamemsg

参考文献

深入浅出 JavaScript 中的 this

相关文章

网友评论

      本文标题:JavaScript爬坑之:apply()与call()的用法和

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