是否可以在javascript构造函数上声明不可枚举的属性?
例如,我需要知道是否可以创建具有不可枚举属性的javascript类的实例是否可以在javascript构造函数上声明不可枚举的属性?,javascript,Javascript,例如,我需要知道是否可以创建具有不可枚举属性的javascript类的实例 // Constructor function MyClass(a) { Object.defineProperty(this, '_number', { enumerable: false }); this.number = a; // Call setter for '_number' } // Getters and setters for '_number' Object
// 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
的任何实例上定义属性\u number
,使其不可枚举,以便实例私有变量(例如\u number
)不会列在in结构的中。您可以使用number
getter/setter来更改私有变量\u number
我尝试在构造函数内部和MyClass.prototype上声明\u number
和number
属性,但没有成功
任何帮助都将不胜感激 您的方法很好,只需注意其他属性值:
您的方法很好,只需注意其他属性值:
如果正确地解释问题,OP不能简单地将对象中数字的值设置为a
。defineProerty()
位于MyClass
?是的,他可以,但听起来他确实想从构造函数中的setter运行(预定的)验证逻辑<如果验证失败并且创建了实例,则code>0
将是默认值。如果正确解释问题,则无法简单地将number
的值设置为对象中的a
。defineProerty()
在MyClass
中?是的,他可以,但听起来他确实想从构造函数中的setter运行(注定的)验证逻辑<如果验证失败并且创建了实例,则code>0
将是默认值。
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
});