this的指向在函數(shù)定義的時候是無法確定的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰,實際this指向是調(diào)用他的對象。
1.栗子1
function a(){
var user = "小瑩瑩";
console.log(this.user);//undefined
console.log(this);//window
}
a();
// 等同于windiw.a()實際為window調(diào)用,還有alert()方法也是window對象
2.栗子2
var obj = {
user:"小瑩瑩",
fn:function(){
console.log(this.user);//小瑩瑩this指向是obj
}
}
obj.fn();
3.栗子3
var obj = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a);//12
}
}
}
o.b.fn();
4.栗子4
var obj = {
a:10,
b:{
//a:12,
fn:function(){
console.log(this.a);//undefined
}
}
}
o.b.fn
當函數(shù)中包含多個對象時,this指向上一級的對象
5.栗子5
var obj = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a);//undefined
console.log(this);//window
}
}
}
var j = o.b.fn;//o.b.fn賦給j時沒有執(zhí)行,只有方法,這時this已經(jīng)指向window
j();
總結(jié):
- 當使用fn()或者定義新對象賦給fn方法 var j =o.fn,this指向是window,alert()方法調(diào)用時window
- 當對象直接調(diào)用方法時,obj.fn(),this指向當前調(diào)用的對象
- 當函數(shù)調(diào)用時包含多個對象的時候,this指向上一級的對象,沒有上一級對象為undefined