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
新建一个cat
,cat
有方法say
,但是dog
没有方法say
,使用apply
就是把执行方法say
的this
或者叫上下文,变成了dog
,这时this.name
和this.msg
就是dog
的name
和msg
了
网友评论