js中this的指向
阿新 • • 發佈:2018-12-10
關於this的指向問題
普通函式中this永遠指向函式執行時所在的物件,也就是說this指向的是最終呼叫它的物件
下面為具體情況:
1.通過函式名直接呼叫的,this指向window
function a(){
var user = "johnny";
console.log(this.user); //undefined
console.log(this); //Window
}
a();
2.通過物件呼叫的,this指向最終呼叫它的物件
var name = "pharaoh" var obj = { name:"johnny", getName:function(){ console.log(this.name); } } window.obj.getName();//johnny
如果一個函式中有this,這個函式有被上一級的物件所呼叫,那麼this指向的就是上一級的物件,注意此處,最終呼叫的還是函式的還是obj物件,所以輸出johnny
這裡還有一種特殊情況,
var o = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var j = o.b.fn;
j();
這裡this指向的是window,因為this指向的是最終呼叫它的物件,j是屬於window的
3.函式作為建構函式,用new關鍵字呼叫時:this指向新new出的物件
function Fn(){
this.user = "johnny";
}
var a = new Fn();
console.log(a.user); //johnny
這裡之所以物件a可以點出函式Fn裡面的user是因為new關鍵字改變了this的指向,相當於把Fn物件複製了一份給了a,因此a能點出user
4.一些有意思的程式碼
function a(xx){ this.x=xx; return this }; var x=a(5); var y=a(6); console.log(x.x); console.log(y.x); //輸入undefined 6 //var x=a(5);此時 x=window,y=undefined //var y=a(6);此時 x=6,y=window(呼叫a函式時this指向window,所以window.x=6,return window,所以y=window) //console.log(x.x);//實際是6.x,就是undefined //console.log(y.x);//實際是window.x,就是6;
var length = 10;
function fn() {
alert(this.length);
}
var obj = {
length: 5,
method: function(fnn) {
fnn();
}
};
obj.method(fn) //輸出10