簡體   English   中英

是否可以在javascript構造函數上聲明不可枚舉的屬性?

[英]Is it possible to declare non enumerable property on javascript constructor?

我需要知道是否有可能制作具有不可枚舉屬性的javascript類實例,例如

// Constructor
function MyClass(a) {
    Object.defineProperty(this, '_number', {
        enumerable: false
    });
    this.number = a; // Call setter for '_number'
}

// Getters and setters for '_number'
Object.defineProperty(MyClass.prototype, 'number', {
   get: function() {
       return this._number;
   },
   set: function(n) {
       // Validate 'n' here
       this._number = n;
   }
});

我想要此代碼執行的操作是在MyClass任何實例上定義屬性_number ,使其無法枚舉,以使實例私有變量(如_number不會在for in結構中列出。 您將使用number getter / setter來更改私有變量_number

我試圖在構造函數內部和MyClass.prototype上都聲明_numbernumber屬性,但是沒有成功...

任何幫助,將不勝感激!

您的方法很好,您只需要注意其他默認為false屬性值:

function MyClass(a) {
    Object.defineProperty(this, '_number', {
        value: 0,          // better than `undefined`
        writable: true,    // important!
        enumerable: false, // could be omitted
        configurable: true // nice to have
    });
    this.number = a; // Call setter for '_number'
}

// Getters and setters for '_number'
Object.defineProperty(MyClass.prototype, 'number', {
   get: function() {
       return this._number;
   },
   set: function(n) {
       // Validate 'n' here
       this._number = n;
   },
   enumerable: true,  // to get `.number` enumerated in the loop
   configurable: true // nice to have
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM