JavaScript 函數定義中的存取限制
在 JavaScript 中,變數對函數的可訪問性取決於函數定義的範圍。在建構函式內宣告的私有變數只能由該建構函式作用域內的函式存取。當函數在建構函數外部定義時,例如使用原型屬性,這會帶來限制。
原型定義的函數和私有變數
考慮以下程式碼,其中TestClass 有一個私有變數privateField:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
在此範例中,在建構函式中定義的nonProtoHello 可以存取privateField,而使用原型定義的prototypeHello 則不能。這是因為原型上定義的函數未在建構函數的範圍內定義。
重寫私有變數存取
不可能允許原型定義的函數直接存取私有變數。這本質上會創建一個 JavaScript 不支援的反向作用域機制。
替代方案:Getters 和 Setters
要啟用原型定義的函數來操作私有變量,您可以使用此物件在建構函式中建立 getter 和 setter。這些公共方法可以存取私有變數並允許它們被原型函數更改。這是一個範例:
function Person(name, secret) { // public this.name = name; // private var secret = secret; // public methods have access to private members this.setSecret = function(s) { secret = s; } this.getSecret = function() { return secret; } } // Must use getters/setters Person.prototype.spillSecret = function() { alert(this.getSecret()); };
以上是如何從 JavaScript 中的原型定義函數存取私有變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!