1

だから、私はjavascriptオブジェクトを持っており、それにプロトタイプを介していくつかのメソッドをアタッチしました。

心配ありません。

ここで、そのオブジェクトをJSONに永続化すると、実際のプロパティ値のみが永続化されます。それは完全に理にかなっています。とにかく、メソッドをどのように永続化しますか?

しかし、JSONオブジェクトを非永続化すると、もちろん、元のオブジェクトと同じようにプロパティ的に見えるオブジェクトになります。このオブジェクトには、メソッドがまったく関連付けられていません。

私はそれが起こる+理由+を理解しています。

私の質問は、この状況を処理するための何らかのパターンがすでにあるのかということです。

私自身は、JS用のClassyクラスと呼ばれる小さなjsライブラリを作成しました。これにより、このようなことができます。

var MyClass = Class.$extend({
  __init__ : function() { alert('called'); },
  toString() : function() {
    return this.value;
  })
});
var obj = MyClass.$withData({value: 42});
alert(obj.toString());

これは機能しますが、オブジェクトの深い階層に簡単に適用する方法がわかりません。

編集:私は最初はあまり明確ではありませんでした。Classy(および私が気付いたばかりのjqueryは適切)が特定のオブジェクトにデータを適用してプロトタイプのメソッドにブレンドできることは知っていますが、本当の問題は、オブジェクトのより深い階層に対してそれをどのように行うかです。

4

1 に答える 1

0

たとえばjQueryをお持ちの場合は、$.extend(obj, yourDataFromJSON);

これにより、2番目のオブジェクトのすべてのデータが最初のオブジェクトにマージされ、既存の値が上書きされます。

ただし、ClassyコードMyClass.$withData(yourDataFromJSON);によると、実際にはネストされたデータに対しても簡単に使用できます。

for(var key in data) {
    var value = getOwnProperty(data, key);
    if(value !== undefined) rv[key] = value;
}

ご覧のとおり、からのすべてがdataオブジェクトに入れられます-それが別のオブジェクト(ネストされたデータがある場合)、配列、またはそうでないものundefined(JSONにも存在しない)であるかどうかは関係ありません

于 2012-06-01T23:46:26.663 に答える