從原型定義的函數存取私有成員變數
在JavaScript 中,建構函式中定義的私有成員變數無法被原型存取-定義的方法。這在下面的程式碼片段中很明顯:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)};
雖然nonProtoHello成功存取privateField,但prototypeHello失敗。
推理
函數,包括prototype -定義的方法,可以存取它們定義的範圍。私有成員變數在建構函數範圍內定義,使得原型定義的方法無法存取它們。
解
為原型方法提供對私有變數的存取:
例如:
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()); };
這種方法允許原型定義的方法透過 getter 和 setter 與私有成員變數交互,同時保持封裝性。
以上是如何從 JavaScript 中的原型定義函數存取私有成員變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!