使用call和apply改变上下文对象,即改变this所指向的内容,可以在自定义上下文中执行函数。
call需要一个参数列表,apply允许传递一个参数作为数组。
var pet={
words:hello,
speak:function(say){
console.log(say+''+this.words);
}
}
pet.speak('speak');//speak hello
var dog={
words:"hi"
}
dog.speak.call(dog,'speak');//speak hi
执行pet.speak(‘speak’)时,this指向pet,调用pet的speak方法,但通过call将this指向了dog,所以结果为speak hi。
也可以利用call和apply改变this上下文的特性,实现继承。
function pet(words){
this.words=words;
this.speak=function(){
console.log(this.words);
}
}
function Dog(words){
pet.call(this,words);
//pet.apply(this,arguments);
}
var dog=new Dog("hello");
dog.speak();//hello