解析器在调用函数每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this指的是一个对象,称为函数执行的上下文对象。
根据函数的调用方式
不同,this会指向不同的对象:
1. 以函数的形式调用时,this永远都是window
2. 以方法的形式调用时,this就是调用方法的那个对象
var name = '全局';
function fun() {
console.log(this.name);
}
var obj = {
name: 'aa',
setName: fun
}
// 以函数形式调用时,this是window
fun(); // '全局'
// 以方法形式调用时,this是调用方法的对象
obj.sayName(); // aa
var name = 222;
var a = {
name: 111,
say: function() {
console.log(this.name);
}
}
var fun = a.say;
fun(); //fun.call(window) ⇒ 222
a.say(); // a.say.call(a) ⇒ 111
var b = {
name: 333,
say: function(callback) {
callback(); // callback.call(window) ⇒ 222
}
}
b.say(a.say);
b.say = a.say;
b.say(); // b.say.call(b) ⇒ 333