一個函數中的this
關鍵字被稱爲調用上下文。
1)如果你定義函數作爲一個對象的一個成員(方法):
myObject.someMethod = function() { this.x = 2; };
然後調用上下文,this
,是在其中添加,myObject
方法的對象。所以在上面調用myObject.someMethod();
之後,myObject.x
就是2.成員x
在您調用方法之前是未定義的,除非您之前已經定義了它。
2)如果您使用的功能與new
關鍵字構造函數,然後this
指的是正在創建新的對象:
function MyX() { this.x = 3; };
var myX = new MyX();
然後您就擁有財產myX.x
設置爲3
請注意,我打電話給我的構造函數MyX()
而不是myX()
。你應該打電話給你Person()
,而不是person()
。這只是一個約定,但是指出一個函數是用作構造函數是有用的。
3)最後,如果你,你呼叫作爲既不是方法,也不是一個構造函數內使用this
,然後this
指全局對象(document
或,等價地,window
)。但請注意,如果您在strict
模式下使用javascript(您應該這樣做),則this
在這種情況下未定義,這意味着您基本上不能在不是方法或構造函數的函數中使用this
。
您的具體問題涉及情況2),構造函數。構造函數中的this.x = 3
只是設置新創建對象的屬性x
。創建某個對象myX
後,可以使用myX.x
作爲任何其他對象屬性在外部訪問和修改x
。
因爲在函數的第二個版本中,變量在函數中的作用域和行爲類似於C#/ Java/PHP中的私有聲明等。 – Chandu 2012-03-06 13:02:42
因爲函數中的var將設置局部變量 – androidavid 2012-03-06 13:03:51
https ://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects – nnnnnn 2012-03-06 13:04:25