[Javascript]整理Javascript中this的用法

  • 245
  • 0
  • 2016-03-05

摘要:[Javascript]整理Javascript中的this用法

最近被Javascript中的this關鍵字搞得頭昏腦脹,所以利用點時間整理一下this的用法。基本上,this是Javascript語言中的一個關鍵字,用在function中。隨著不同的情境,代表著不同的物件。有一個概括性的原則,this代表著叫用該function的物件。

以下有四個function被叫用(invoke)的情境,要判別this代表著什麼物件,使用以上的原則就可以判別了。

 

invoke 單純的function



var x = 1;
function test(){
    alert(this.x);
}

test(); //1

可以看到test()前面沒有任何物件,在這情況下,test()中的this所指向的,就是Global的物件。在瀏覽器中,就是window物件。

 

invoke 物件中的method



var x = 10;
var foo = {
	x: 100,
	f: function(){
		alert(this.x);
	}
}

foo.f(); //100

當function是建立在某個物件中,其實也就是該物件的method。當叫用該function時,這時候的this所代表的是點(.)前面的物件,在這例子中也就是foo這個物件。所以alert出來的值,是foo這個物件的x,而不是最外層的x。

 

使用Function method: call() & apply() 進行invoke



function myFunction() {
	alert(this.x);	
}

var x = 10;
var obj = {};
obj.x = 100;

myFunction.call(obj);//100

使用Function method中的call及apply,其實是把直接指派物件給function中的this。所以以上的例子,this 很明顯的就是obj物件。

 

建構子funciton的叫用



function MyFunction() {
	this.f = function(){
		alert(this.x);
	}
}

var x = 10;
var obj = new MyFunction();
obj.x = 100;
obj.f(); //100

之前的文章有說過,使用建構式的建立物件時,其實也就等同於使用call()來直接指派所建立的物件為建構式function的this。所以建構式內的this所指向的,就是所建構出來的物件 -> obj。

 

參考資料