いくつかのプロパティをカプセル化するオブジェクト定義の作成に取り組んでいます。このオブジェクトには 4 つの要件があります。
- いつでも複数のインスタンスを作成できます
- オブジェクトで定義されたプロパティのみを設定/取得できます
- オブジェクトは文字列化可能でなければなりません (プロパティと関連する値のみ)
- 文字列化されたバージョンは解析可能で、オブジェクトを返す必要があります
これは私がこれまでに持っているものの簡略化されたバージョンです:
function Car() {
var _make;
Object.defineProperty(this, 'make', {
get: function() {
return _make;
},
set: function(make) {
_make = make;
}
});
Object.preventExtensions(this);
}
これが、ゲッターとセッターを使用してオブジェクトを定義するための最も簡単な方法であるかどうかはわかりません。を使用する代わりになるものはありObject.defineProperty
ますか、それともこれが新しい基準ですか?
このアプローチでは、独自のstringify
メソッド (以下を参照) を作成する必要もあります。これは、呼び出しJSON.stringify
によって関数が取り除かれ、これによって が取り除かれるためmake
です。自分で書くことに代わるものはありますか?どうにかしてオブジェクト定義を変更できますか?
Car.prototype.stringify = function () {
return JSON.stringify({ make: this.make});
}
Car
さらに、 JSON オブジェクトから aをインスタンス化できるようにするには、オプションのコンストラクター引数を指定する必要があります。
function Car(car) {
var _make;
if(car !== undefined && car != null) {
_make = car.make;
}
...
}
繰り返しますが、これはすべての要件を満たす最善のアプローチですか?