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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容