我需要知道是否可以创建具有不可枚举属性的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;
}
});
我希望此代码要做的是在_number
的任何实例上定义属性MyClass
,使其不可枚举,以便_number
等实例私有变量不会被包含在内。 t,列出for in
结构。您可以使用number
getter / setter来更改私有变量_number
。
我尝试在构造函数和_number
内声明number
和MyClass.prototype
属性但没有成功...
任何帮助将不胜感激!
答案 0 :(得分:2)
您的方法很好,您只需要注意其他属性值which default to 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
});