簡體   English   中英

如何將對象引用傳遞給mootools中另一個對象的構造函數?

[英]How can I pass an object reference into the constructor of another object in mootools?

我環顧四周,幾乎在其他任何我能想到的地方,但我無法找到解決問題的方法,所以這里是:

在我當前的項目中,我有一個類將對象實例化為其構造函數的一部分,並將其自身傳入,以便子對象具有對其父對象的引用。 理想情況下,無論如何。 然而,最終發生的事情是,孩子獲得了父對象的靜態視圖。 這是我的意思的一個例子:

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來說明這一點。

所以問題是這樣的:有沒有什么方法可以讓一個子對象有一個真正的實際引用它的父,或者我注定只有一個靜態視圖?

這是因為setOptions方法通過Object.merge將屬性解引用到新的Object中,將它們克隆到子實例的本地原型中。

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

更改構造函數以接受另一個參數,parent並靜態存儲this.parent = parent ,然后從中調用。

順便說一句,不要使用.parent因為這是在mootools中擴展類時保留的那種:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM