【发布时间】:2014-06-10 15:15:46
【问题描述】:
标题的措辞可能需要重新审视,但现在考虑以下代码:
var ParentControl = function()
{
this.ShowAlert = function()
{
alert('hi!');
}
this.childControl = new ChildControl();
};
var ChildControl = function()
{
// IN THIS SCOPE HERE I NEED TO CALL 'ShowAlert'
};
var parentControl = new ParentControl();
根据上面代码 sn-p 中的注释,我需要 ChildControl 的实例来调用其父级的“ShowAlert”函数,但我不知道如何。
我的尝试
只需在我写评论的地方调用ParentControl.ShowAlert() - 显然不起作用,因为parentControl 是实例(我不想明确提及)。
我也尝试过将父控件传递给ChildControl 的构造函数,但理想情况下我希望让子控件独立于任何特定类型的父控件。
【问题讨论】:
-
“理想情况下,我希望让子控件独立于任何特定类型的父控件” 在这种情况下,某种事件发布者/订阅模式怎么样?
ChildControl实例发出事件/消息,ParentControl实例对其作出反应。 -
@FelixKling - 这听起来很理想。我知道我可以在孩子身上将这个事件暴露为
this.somethingHappened,但是父母怎么会知道发生了什么事呢?还是我的方法不对? -
我不是很擅长阅读,仍然不明白在父级内部传递
new ChildControl(this);的问题是什么? -
或者这个 -> jsfiddle.net/mQMUc ?
-
在孩子内部,你做
this.emit('foo'),父母必须用this.childControl.subscribe('foo', callback)听孩子。在您的情况下,似乎事件会在父订阅之前发出,在这种情况下,您还必须实现一种机制,将发出的事件“重播”给新订阅者。 但是 将父项作为依赖项传递给子项是一个更简单的解决方案,如果没有重大理由反对它,您应该使用它。保持简单;)
标签: javascript function oop object instances