首頁 > web前端 > js教程 > 主體

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

Patricia Arquette
發布: 2024-10-27 03:11:30
原創
492 人瀏覽過

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

從原型定義的函數存取私有成員變數

在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()
登入後複製

出現此行為是因為建構函式中定義的方法由於可以存取私有變數的定義範圍而可以存取它們。但是,原型定義的方法不是在建構函數的作用域內創建的,並且無法存取其局部變數。

解決存取需求

雖然沒有直接的方法要授予對原型定義方法的私有變數的存取權限,可以使用其他方法來實現所需的功能:

  • Getters 和Setters: 在this 物件上建立getters 和setters 以提供對私有變數的受控存取。原型定義的方法以及有權存取該物件的其他程式碼可以利用這些 getter 和 setter。

這是一個範例:

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!