Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在javascript构造函数上声明不可枚举的属性?_Javascript - Fatal编程技术网

是否可以在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

例如,我需要知道是否可以创建具有不可枚举属性的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
的任何实例上定义属性
\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
});