this規(guī)則
1.函數(shù)預(yù)編譯過(guò)程绿店,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
- 解析
運(yùn)行函數(shù)前璃搜,進(jìn)行預(yù)編譯拙寡。
1.test()時(shí):
GO:{
a:5,
test:function test
this:window
}
AO:{
a:0
}
//執(zhí)行test();時(shí)授滓,this指向window
1.new test()時(shí):
GO:{
a:5,
test:function test
}
AO:{
this:{}
a:0
}
//執(zhí)行new test();時(shí),AO會(huì)在后臺(tái)生成this對(duì)象肆糕,所以this指向ao本身
2.全局作用域里般堆,this指向window
3.call和apply可以改變this指向,區(qū)別時(shí)參數(shù)列表不一樣诚啃。
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();
//運(yùn)行fun()
//但是不是this.fun()...是外面的那個(gè)fun
}
}
b.say(a.say);//222
b.say = a.say;
b.say();//333
如果搞懂了這題,就沒(méi)多大問(wèn)題了始赎。