是否可以在javascript构造函数上声明非枚举属性?

时间:2016-10-29 17:28:41

标签: 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.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内声明numberMyClass.prototype属性但没有成功...

任何帮助将不胜感激!

1 个答案:

答案 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
});