摘要:[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。
參考資料