如何重用和覆盖继承的javascript函数
|
我有一个有关鼠标事件的类。我正在使用dojo b / c,我喜欢它的面向对象方法
dojo.declare(\"MouseObject\", null, {
constructor: function(){},
onclick : function(){...},
_onClick : function(){...}
});
_onClick()
监听窗口生成的鼠标按下/释放事件,并确定是否发生单击。如果有,将调用onClick()
。 onClick()
执行所有可能的点击共有的功能,因此每次用户单击时都需要调用它。
有时用户可能想扩展ѭ2的功能,是否仍然可以合并原始功能而不进行复制粘贴?我可以想到两种方法,我都不喜欢
dojo.declare(\"MouseObjectChild\", [MouseObject], {
constructor: function(){},
onclick : function(){this.inherited(arguments);...}
});
这样做的缺点是我必须继续创建我真正不需要的新类,并添加两个中间函数
dojo.declare(\"MouseObject\", null, {
constructor: function(){},
onclick : function(){this._onClick()...}, //child onClick
_onClick : function(){...}, //parent onClick
__onClick : function(){...} //listener
});
但这看起来不像是好的代码
赏金大方,我希望获得有关如何最好地解决程序与用户交互问题的专家意见。如果程序提供了至关重要的功能,例如在画布上画一个圆圈,那么用户将如何与之交互。如果用户想在圆后方画一个三角形怎么办?圆圈前有一个正方形?然后,该程序将必须提供像这样的前置和后置方法:
beforeDraw();
draw();
afterDraw();
这被认为是好的设计吗?我应该将函数指针放在数组中并按顺序调用它们吗?
没有找到相关结果
已邀请:
6 个回复
扑北爱
导力疵谜
如果他想创建一个新类并扩展该功能,则调用
是最好的方法。
脾萌
然后稍后(示例通过上下文):
或者,如果您想将范围传递给回调,则可以将
方法更改为接受范围参数,然后使用
或
并传入
或其他对象:
根据定义事件模型函数的方式和位置,可以将功能范围限定于对象的特定实例,对象的每个实例,全局范围,等等,取决于要如何分配,更改和触发这些回调。
筷啸够对铅
由于我的班级每次都调用MYAPP(是的,因此要收取一定的范围费用),因此我可以操纵挂在MYAPP上的函数,使用它的任何人都会受益。
另一边:
现在,我无法更改MYAPP并查看MouseObject或其实例中的更改,因为该函数已通过引用传递给MouseObject。我只能使用AOP更改实例(或通过更改类的原型来更改所有将来的实例)。 就像是:
它仅取决于您如何使用它:某些实例,将来的所有实例(直到关闭)或所有其他内容。 建议使用“事件队列”。这更像是活动对象模式,其中您使用对象数组和队列管理器来管理任务。这是最容易实现的方法,但是有几个缺点,即队列可能被“阻塞”并且不再进行处理。我基于我编写的iPhone应用程序为这种管理类型写了一个库,称为proto-q(http://code.google.com/p/proto-q/)。它对我来说效果很好,但并不是针对每个人的应用程序。
魄龟呸筹
厢界山攀
客户端实例化:
如果您遵循此模型,则代码会更少,但并不是那么干净。另一个选择是编写一个真实的API,请参见下文。 事件模型 如果您想要一个真正的API,那么我将提供事件: