從原型定義的函數存取私有成員變數
在JavaScript 中,在建構函式中宣告的私有變數不能直接被方法存取在原型中定義。可以在以下程式碼片段中觀察到這種情況:
TestClass = function(){ var privateField = "hello"; this.nonProtoHello = function(){alert(privateField)}; }; TestClass.prototype.prototypeHello = function(){alert(privateField)}; // This executes successfully: t.nonProtoHello() // This fails: t.prototypeHello()
出現此行為是因為建構函式中定義的方法由於可以存取私有變數的定義範圍而可以存取它們。但是,原型定義的方法不是在建構函數的作用域內創建的,並且無法存取其局部變數。
解決存取需求
雖然沒有直接的方法要授予對原型定義方法的私有變數的存取權限,可以使用其他方法來實現所需的功能:
這是一個範例:
function Person(name, secret) { // public this.name = name; // private var secret = secret; // public methods with controlled access this.setSecret = function(s) { secret = s; } this.getSecret = function() { return secret; } } // Prototype-defined method using getters Person.prototype.spillSecret = function() { alert(this.getSecret()); };
總之,雖然從原型定義的方法存取私有變數本質上受到限制,但使用 getter 和 setter 或間接存取提供了靈活的解決方案實現對這些變數的受控存取。
以上是如何從 JavaScript 中的原型定義函數存取私有成員變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!