1

私はjQueryを使用していますが、JavaScriptはまだかなり新しいです。私は次のようにオブジェクトを実装しています:

MyObject = {
  properties     : [{}],
  resetProperties: function resetProperties() { this.properties = [{}] }
};

上記のコードでわかるように、propertiesを実行してリセットできますMyObject.resetProperties()が、それを行うために、変数の2倍を記述します。[{}]そのコードを繰り返さずに同じことをどのように達成する必要がありますか?


アップデート

私は次のことをしようとしました:

MyObject = {
  properties       : this.propertiesDefault,
  resetProperties  : function resetProperties() { this.properties = [{}] },
  propertiesDefault: [{}]
};

しかし、私は「TypeError: invalid 'in' operand MyObject.properties」を取得し、それが正しい方法であるかどうかはわかりません。

4

3 に答える 3

1

デフォルト/リセットプロパティを、変更されるオブジェクトとは別のオブジェクトとして持つことを避けることは不可能だと私には思えます。

デフォルト値を設定し、初期化およびリセット機能で複製することをお勧めします。質問にjQueryのタグを付けたので、オブジェクトのクローンを作成して満足していると思います。

MyObject = {
    defaultProperties : [{}],
    properties : jQuery.extend(true, {}, this.defaultProperties),
    resetProperties: function() { 
        this.properties = jQuery.extend(true, {}, this.defaultProperties);
    }
};

オブジェクトのクローン作成の詳細については、次のStackOverflowの質問を参照してください。

JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?

これはjQuery.extendのドキュメントです。

http://docs.jquery.com/Utilities/jQuery.extend

于 2012-11-23T18:32:11.537 に答える
0

私が知っていることから、これは不可能です。プロパティのリセットをハードコーディングする必要があります。オブジェクトの外部に変数キャッシュを設定しようとしましたが、プロパティをリセットすると、残念ながらその値が維持されます。

 var obj = {
     p: [ {} ],
     r: function() { this.p = this.cache; }
 };

 obj.cache = obj.p; // attempt to set to original

 obj.p[0].m = 5; // modify

 obj.r(); // reset

 --------

 >>> obj.p[0].m; // 5

cacheプロパティがそのまま変更されていると想定できpます。したがって、そのようにリセットすることはできません。

于 2012-11-23T17:46:52.117 に答える
0

あなたが望むものに依存します。あなたはjavascriptに慣れていないので、関数を使ってカスタムオブジェクトを作成することに慣れていないかもしれません。これは一般的なjavascriptの「OOP」のような方法です。

function MyObjectClass() {
    this.properties = null;
    this.resetProperties();
}
MyObjectClass.prototype.resetProperties = function () { this.properties = [{}] };

var MyObject= new MyObjectClass();

MyObjectしかし、私たちはその機能が果たす必要があることを本当に知りません。プレーンな古いjavascriptオブジェクトである必要があるという要件があるかもしれません。またはそうではないかもしれません、そしてあなたは終わりです。

もちろん、いつでも直接行うことができます。

MyObject = {
          properties     : null,
          resetProperties: function () { this.properties = [{}];}
        };
MyObject.resetProperties();
于 2012-11-23T21:13:22.270 に答える