gpt4 book ai didi

javascript - 如何重用和覆盖继承的javascript函数

转载 作者:搜寻专家 更新时间:2023-11-01 04:20:17 25 4
gpt4 key购买 nike

我有一个鼠标事件类。我正在使用 dojo b/c 我喜欢它的 OO 方法

dojo.declare("MouseObject", null, {
constructor: function(){},
onclick : function(){...},
_onClick : function(){...}
});

_onClick() 监听窗口生成的鼠标按下/释放事件并确定是否发生单击。如果有,则调用 onClick()onClick() 执行所有可能的点击共有的功能,因此每次用户点击时都需要调用它。

有时用户可能想扩展 onClick() 的功能 有没有办法在不复制粘贴的情况下合并原始功能?我能想到的两种方式,我都不喜欢,是

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
});

但这看起来不像是好的代码


关于赏金,我需要有关如何最好地解决程序与用户交互的专家建议。如果程序提供了一个关键功能,例如在 Canvas 上画一个圆圈,那么用户如何最好地与之交互。如果用户想在圆后面画一个三 Angular 形怎么办?圆前面是正方形?然后程序必须提供像这样的前置和后置方法:

beforeDraw();
draw();
afterDraw();

这被认为是好的设计吗?我是否应该将函数指针放入数组中并按顺序调用它们?

最佳答案

正如“我应该将函数放在它们自己的数组中并按顺序调用它们”和“构建您自己的事件系统”的想法所建议的,您可能想看看 dojox.lang.aspect捆绑在扩展标准库中的库。它基本上应该是“dojo.connect”解决方案的更高级版本。

dojo.require('dojox.lang.aspect');
var aop = dojox.lang.aspect;

function log(msg){ return function(){
console.log(msg);
};}

var obj = {
draw : log('draw circle');
};

obj.foo();
//prints
// draw circle

aop.advise(obj, 'draw', [
{before: log('draw triangle')},
{after: log('draw a square')},
{after: log('done!')}
]);

obj.foo();
//prints
// draw a triangle
// draw a circle
// draw a square
// done!

关于javascript - 如何重用和覆盖继承的javascript函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6178683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com