javascript - 如何在自定义 js 对象上设置自己的处理程序事件?
问题描述
有一个Interval
with next 用法:
let interval = new Interval(1000);
interval.ontick = function(progress){
console.log('Progress:', progress);
};
interval.start(10);
超时一秒后内部start()
调用onTickEventHandler()
,但是ontick
是undefined
.
function start(count) {
_count = count;
_intervalId = setInterval(onTickEventHandler, _timeout);
}
function onTickEventHandler() {
if (_progress == _count) {
reset();
callEventHandler(onfinish);
return;
}
callEventHandler(ontick, _progress++); // ontick is undefined
}
我试过这样
_intervalId = setInterval(onTickEventHandler.bind(this), _timeout);
this
有我的interval.ontick
,但里面onTickEventHandler
-ontick
是undefined
。
更新
我到处都改用let ontick
了。function ontick
this
可以简化吗?目标是与 DOM 元素一样:
button.onclick = function(){}
interval.ontick = function(){}
完整代码
const Interval = function (timeout) {
const _timeout = timeout;
let _intervalId;
let _count;
let _progress = 0;
function ontick(){}
function onpause(){}
function onresume(){}
function onfinish(){}
function onTickEventHandler() {
if (_progress == _count) {
reset();
callEventHandler(this.onfinish);
return;
}
callEventHandler(this.ontick, _progress++);
}
function start(count) {
_count = count;
_intervalId = setInterval(onTickEventHandler.bind(this), _timeout);
}
function pause() {
clearInterval(_intervalId);
callEventHandler(this.onpause);
}
function resume() {
this.start(_count);
callEventHandler(this.onresume);
}
function reset() {
clearInterval(_intervalId);
_progress = 0;
}
function callEventHandler(handler, arg1){
if (handler){
handler(arg1);
}
}
return {
start: start,
pause: pause,
resume: resume,
ontick: ontick,
onpause: onpause,
onresume: onresume,
onfinish: onfinish,
};
};
解决方案
推荐阅读
- javascript - 如何识别数据集中的断点(趋势线边缘)?
- asynchronous - SwiftUI + MVVM + 模型中的异步任务
- javascript - ML5 FeatureExtractor addImage 不工作
- javascript - 满足特定要求后替换数组中的多个数字
- javascript - 不断收到参考错误:将外部 Javascript 文件链接到 HTML 文件时未定义文档
- android - NavigationView 菜单不更新
- vector - Rust - 尝试从向量中删除结构元素时出错
- ruby-on-rails - 如何在 React 中以 json 格式发送表单数据?
- python - 在 VGG16 模型中使用灰度图像时出现“输入不兼容错误”
- r - 为给定的数值向量分配一个具有超过 2 个级别/标签的因子向量