this规则
1.函数预编译过程,this指向window
var a = 5;
function test(){
a=0;
console.log(a);
console.log(this.a);
var a;
console.log(a);
}
test();
console.log("---------------")
new test();
- 答案
0
5
0
---------------
0
undefined
0
- 解析
运行函数前,进行预编译。
1.test()时:
GO:{
a:5,
test:function test
this:window
}
AO:{
a:0
}
//执行test();时,this指向window
1.new test()时:
GO:{
a:5,
test:function test
}
AO:{
this:{}
a:0
}
//执行new test();时,AO会在后台生成this对象,所以this指向ao本身
2.全局作用域里,this指向window
3.call和apply可以改变this指向,区别时参数列表不一样。
4. obj.fun(); fun里的this指向obj。
var obj = {
a: function () {
console.log(this.name)
},
name: 'aaabb'
}
obj.a();//aaabb
var name = "222"
var a = {
name: "111",
say: function () {
console.log(this.name);
}
}
var fun = a.say;
fun()//222;fun中的this指向window
a.say()//111;this指向a
var b = {
name: "333",
say: function (fun) {
//this--->b
fun();
//运行fun()
//但是不是this.fun()...是外面的那个fun
}
}
b.say(a.say);//222
b.say = a.say;
b.say();//333
如果搞懂了这题,就没多大问题了。