一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
demo1:
var obj = {name:"ii"};
function ff(){
console.log(this);
//console.log(this.name);
}
ff(); //this代表windows
ff.call(obj); //this代表obj
ff执行call方法的时候,让fn方法中的this变为第一个参数值obj。
demo2
面试题:
var color = "red";
var a = {color:"yellow"}
function show_color(){
var color = "green";
console.log(this.color);
}
show_color();
show_color.call()//等效于show_color.call(window)
show_color.call(a)
demo3
var Pet = {
words : '喵喵喵',
speak : function (say) {
console.log(say + ''+ this.words)
}
}
Pet.speak('Speak'); // 结果:Speak喵喵喵
var Dog = {
words:'汪汪汪'
}
//将this的指向改变成了Dog
Pet.speak.call(Dog, 'Speak'); //结果: Speak汪汪汪