首頁 >web前端 >js教程 >如何從 JavaScript 中的原型定義函數存取私有變數?

如何從 JavaScript 中的原型定義函數存取私有變數?

Susan Sarandon
Susan Sarandon原創
2024-10-27 20:16:30830瀏覽

How can you access private variables from prototype-defined functions in JavaScript?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn