this的四个原则:
- 函数预编译过程,this指向window,函数1内的函数2预编译过程,this指向函数1;
- 全局作用域时,this指向window
- call/apply/bind可以改变this指向
- obj.func(),func()内的this指向obj,谁调用指向谁
实例
var obj = {
name: 'doudou',
say: function() {
test();
}
}
function test() {
console.log(this.name)
}
var name = 'feifei';
console.log(this.name); //feifei
test(); //feifei
test.call(obj); //doudou
obj.say(); //feifei
分析如下:
- console.log(this.name),此时为全局作用域,this指向window,输出feifei
- 执行test(),预编译test时,this指向window,输出feifei
- 指向test.call(obj),改变this指向obj,输出obj.name,doudou
- 执行obj.say(),此时say()内this指向obj,但执行test,test预编译时,this指向window,输出feifei,如果say改为function() {test.call(obj)}, 改变this指向obj,输出obj.name doudou