![](/img/trans.png)
[英]How to pass an object as an argument and reference it inside a constructor
[英]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.