2

私はdeanedwardsbase.js(http://dean.edwards.name/weblog/2006/03/base/)を使用して、プログラムをオブジェクトに整理しています(base.jsは、これまで使用したことがない場合はすばらしいです) !)。とに​​かく、私の質問は一般的であり、私の答えを知るためにbase.jsを知る必要はありません。

オブジェクトの1つにDOM要素への参照であるプロパティがありref、このオブジェクトはを使用してJSONとして保存されることを意図してJSON.stringifyいますが、DOM要素は循環構造であるため、想像できません。オブジェクトをJSONに変換します。

この問題を回避するためにhtml()、プロパティを返すことを目的としたメソッドがありますが、オブジェクト内からのみアクセスできるため、に送信されないプライベートプロパティとしてref持つ必要があります。refstringify

それを行うための最良の方法は何ですか?

4

2 に答える 2

3

JavaScriptでプライベートプロパティを持つことはできないことをおそらくご存知でしょう。

JSON.stringify興味深いことに、メソッドを持つオブジェクトを渡すとtoJSONJSON.stringifyは自動的にそのメソッドを呼び出して、そのオブジェクトのJSON可能な表現を取得します。したがって、あなたがしなければならないのは、このメソッドを実装することだけです。

たとえば、コピーするプロパティのみを含むオブジェクトの浅いコピーを作成できます。

MyConstructor.prototype.toJSON = function() {
    var copy = {},
        exclude = {ref: 1};
    for (var prop in this) {
        if (!exclude[prop]) {
            copy[prop] = this[prop];
        }
    }
    return copy;
};

デモ

別の方法は、カスタム置換関数を使用するrefことですが、除外するものと保持するものを制御するのはより難しい場合があります(異なるオブジェクトにrefプロパティがある場合)。

JSON.stringify(someInstance, function(key, value) {
     if(key !== 'ref') {
         return value;
     }
});

デモ

于 2012-08-01T14:42:34.260 に答える
0

変数の可視性を設定するためのサンプルは次のとおりです

function Obj(){
       this.ref = 'public property'; // this property is public from within the object

       var ref = 'private proerty'; // this property is private.

       var self = this;

        this.showRef = function(){
            alert(ref);
            alert(self.ref);
        };
    }

var obj = new Obj();
obj.showRef();
于 2012-08-01T14:34:48.343 に答える