【问题标题】:JavaScript objects dependency from another objectsJavaScript 对象依赖于另一个对象
【发布时间】:2016-03-15 15:36:32
【问题描述】:

谁能解释或告诉我如何合并两个 JavaScript 对象,也许我可以称它们为小部件,然后一起工作。

假设我有一个代表资源管理器窗口的大对象(window)和一个代表带有各种按钮的工具栏的较小对象(toolbar)。单独操作它们(添加、删除、更改属性等)我没有问题。但是我如何让它们一起工作呢? 例如,如果我想以这种方式从 window 中删除 toolbar window.Toolbar.Remove()

Remove() 函数是 toolbar 对象的一部分,并且会从 DOM 中删除它自己的 toolbar,但是我如何从窗口对象中删除它的引用并将其设置为 null。我应该怎样销毁这个toolbar

如果我销毁主要父对象window,我应该如何销毁所有较小的对象,例如toolbar

高度赞赏的任何指针。

【问题讨论】:

  • “我没有问题。但是如何让它们一起工作呢?”你必须更具体
  • “如何从窗口对象中删除它的引用并将其设置为空。我应该如何销毁这个工具栏吗?”只要你没有做类似window.toolbar = toolbar 的事情或没有在代码中的其他地方引用toolbartoolbar 对象将被自动垃圾收集。即使你做了类似window.toolbar = toolbar 之类的事情,只需执行window.toolbar = undefineddelete window.toolbar 将删除对toolbar 的任何引用,并且会再次被垃圾回收。

标签: javascript oop widget javascript-objects


【解决方案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;
}

【讨论】:

  • 第二个选项非常适合我。非常感谢;)
猜你喜欢
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2023-03-03
  • 2017-08-14
  • 1970-01-01
相关资源
最近更新 更多