2016-03-15 75 views
0

有人可以解釋或告訴我如何合併兩個JavaScript對象,也許我可以稱之爲小部件,然後一起工作。JavaScript對象依賴於另一個對象

可以說我有一個大對象(窗口),其代表一個瀏覽器窗口和一個較小的對象(工具欄),其具有各種按鈕的工具欄表示。單獨操作(添加,刪除,更改屬性等)我沒有問題。但我如何讓他們一起工作? 例如,如果我想從窗口以這種方式刪除工具欄 window.Toolbar.Remove()

Remove()功能toolbar對象的一部分,並會從DOM刪除工具欄它的自我,但我怎麼刪除它的參考從窗口對象並將其設置爲null。我應該摧毀這toolbar一些如何?

如果我銷燬主要父對象window,我應該如何銷燬所有像toolbar這樣的小對象?

任何指針高度讚賞。

+0

「我沒有問題,但我如何讓他們一起工作?「你需要更具體的 –

+0

「我如何從窗口對象中刪除它的引用並將其設置爲空,我應該如何銷燬這個工具欄?只要你沒有做過像'window.toolbar = toolbar'這樣的東西,或者沒有在你的代碼中的其他地方引用'toolbar','toolbar'對象就會自動被垃圾收集。即使你做了像'window.toolbar = toolbar'這樣的操作,只需要執行'window.toolbar = undefined'或'delete window.toolbar'就可以刪除對'toolbar'的任何引用,並且它會被再次垃圾回收。 –

回答

1

我看到這裏有兩個可能的選擇:

1)讓孩子知道小部件父母。

你可以有這樣的事情(僞代碼):

window.addChild(name, WigdetClass) { 
    this[name] = new WigdetClass(this); 
} 

// add toolbar 
window.addChild('toolbar', Toolbar); 

// Toolbar constructor accepts `parent` as parameter 
Toolbar(parent) { 
    this.parent = parent; 
} 

Toolbar.prototype.Remove() { 
    // remove self from the page 
    ... 
    // set parent reference to null 
    parent.toolbar = null; 
} 

2),或者你可以將「刪除」父對象:

Window.prototype.RemoveChild(child) { 
    // remove child from the document 
    ... 
    var propertyName = this.findChildName(child); // 'toolbar' 
    this[propertyName] = null; 
} 
+0

第二個選項適合我很好。非常感謝 ;) –