[英]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
上都聲明_number
和number
屬性,但是沒有成功...
任何幫助,將不勝感激!
您的方法很好,您只需要注意其他默認為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.