JavaScript 中的物件變數存取:this.var 還是 Not?
在 JavaScript 的物件導向程式設計模型中,人們常常想知道是否每個物件內的變數都需要 this 關鍵字。
this.var 與 Local變數
與 C 的基於類別的模型不同,JavaScript 使用原型繼承。在原型繼承中,一切都是對象,對象可以從其他對象繼承。
在 JavaScript 中,使用 new 關鍵字呼叫的建構子會建立新物件並為其指派屬性。建構函數中的 this 關鍵字引用新建立的物件。
可透過 this 關鍵字存取的方法是在物件上呼叫的函數。但是,在方法作用域內宣告的局部變數不能透過 this 直接存取。
範例:
function Foo() { this.bar = 0; this.getBar = function() { return this.bar; }; }
在此範例中,this.bar 指的是 bar Foo 實例的屬性。但是,getBar 方法中的 bar 引用的是預設情況下未定義的局部變數。要存取屬性,需要使用 this.bar。
透過閉包建立私有屬性
為了建立私有屬性,JavaScript 依賴閉包。在建構函數作用域內定義的函數可以存取該建構函數的局部變數。因此,透過在建構函式中建立函數並將它們公開為特權方法,您可以維護私有屬性。
範例:
function Foo() { var bar = "foo"; this.getBar = function() { return bar; }; }
在此範例中, bar 是Foo 建構子的局部變數。 getBar 方法是有權存取 bar 的特權方法。
原型方法和特權方法
原型物件上定義的方法由所有實例繼承。但是,除非子原型繼承自父原型,否則它們無權存取特權方法。
總之,雖然從方法內存取物件屬性需要 this.var,但對於局部變數來說並不是必需的。特權方法,定義為建構函式中的閉包,提供了一種在 JavaScript 的物件導向程式設計模型中建立私有屬性的機制。
以上是我什麼時候應該使用 `this.var` 來存取 JavaScript 物件中的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!