1

私はここを見回しましたが、他のほとんどすべての場所で考えられますが、問題の解決策が見つからないため、次のようになります。

現在のプロジェクトでは、コンストラクターの一部としてオブジェクトをインスタンス化し、子オブジェクトがその親への参照を持つようにそれ自体を渡すクラスがあります。とにかく、理想的には。ただし、最終的に発生するのは、子が親オブジェクトの静的ビューを取得することです。これが私が意味することの例です:

var myParentClass = new Class({
    name: '',
    child: null,

    initialize: function(){
        this.name = 'fred';
        this.child = new myChildClass({ parent: this });
        this.name = 'george';
        this.setFeedback('feedback1');
        this.child.setFeedback('feedback2');
    },

    setFeedback: function(id){
        $(id).set('html',this.name);    
    }

    });

var myChildClass = new Class({

    Implements: [Options],

    options: {
        parent: null,
    },

    initialize: function(options){
      this.setOptions(options);   
    },

    setFeedback: function(id){
        this.options.parent.setFeedback(id);       
    }
});


var a = new myParentClass();

この例では、feedback1の内容は「george」であり、feedback2の内容は同じであると予想されます。しかし、そうではありません。これは、オブジェクトがパラメーターとして渡された後に名前プロパティが変更された親の静的ビューを持っているため、「fred」です。あなたのさらなる楽しみのために、私は要点を説明するためにjsfiddleを作りました。

だから問題はこれです:子オブジェクトにその親への実際の実際の参照を持たせる方法はありますか、それとも静的なビューしか持たない運命にありますか?

4

1 に答える 1

4

これは、setOptionsメソッドがObject.mergeを介してプロパティを新しいオブジェクトに逆参照し、それらを子インスタンスのローカルプロトタイプに複製するためです。

https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.Extras.js#L110

コンストラクター関数を変更して、別の引数、親を受け入れ、静的に格納this.parent = parentしてから、そこから呼び出します。

.parentちなみに、これはmootoolsでクラスを拡張するときに予約されているので使用しないでください:)

于 2012-08-14T20:26:04.100 に答える