2016-10-29 9 views
0

私は例えば、非列挙属性を持つ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; 
    } 
}); 

MyClassの任意のインスタンスにプロパティ_numberを定義することです例えば、_numberのようなインスタンスのプライベート変数は、for in構造体にはリストされないように、列挙できません。プライベート変数_numberを変更するには、numberゲッター/セッターを使用します。

私は任意の助けをいただければ幸いです...ない成功とコンストラクタの内部とMyClass.prototypeの両方_numbernumberプロパティを宣言

を試してみました!

答えて

1

あなたのアプローチは結構です、あなただけの他の属性は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 
}); 
+0

正しく質問を解釈した場合、OPは単にA' 'にnumber''の[値]を設定できませんでした'MyClass'の' Object.defineProerty() 'の中にありますか? – guest271314

+0

ええ、そうかもしれませんが、コンストラクターのセッターから(最終的な)検証ロジックを実行したいと思うように思えます。検証が失敗し、それにもかかわらずインスタンスが作成された場合、 '0'がデフォルト値になります。 – Bergi

関連する問題