2

いくつかのプロパティをカプセル化するオブジェクト定義の作成に取り組んでいます。このオブジェクトには 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;
    }
    ...
}

繰り返しますが、これはすべての要件を満たす最善のアプローチですか?

4

1 に答える 1