Javascript 什么';向以下模块添加回调的最佳方法是什么?
我有以下模块Javascript 什么';向以下模块添加回调的最佳方法是什么?,javascript,jquery,Javascript,Jquery,我有以下模块 var m=(function() { // setup variables return { center: function() { // do stuff }, open: function(settings) { // do open stuff // setups the handler for the close... $close.on("c
var m=(function() {
// setup variables
return {
center: function() {
// do stuff
},
open: function(settings) {
// do open stuff
// setups the handler for the close...
$close.on("click",function(e) {
e.preventDefault();
m.close();
});
},
close: function() {
// do close stuff
// ** need to add code here
//to perform a callback function on close
// EDIT
if(this.hasOwnProperty("callback"))
callback();
},
//** EDITED
addCallback: function(func) {
this.callback=func;
}
};
}());
// open
m.open();
中的关闭由单击事件自动触发。我想在close()中插入一个回调函数,以便在关闭时执行。。。我考虑添加一个函数,如
addCallback(callback) {
this.callback=callback;
}
但我不知道如何在close()中调用它
**编辑**
感谢user3297291提供了下面的响应,Barmar说得对,实际上我只需要一个回调,而不是一个数组。我通过添加addCallback()编辑了上述代码。那么要运行的代码将是:
m.open()
function check() {
alert("hello");
}
m.addCallback(check);
但这不起作用,我试图理解为什么,我对javascript OO还不熟悉 您必须跟踪一系列回调(或仅一个回调)。最简单的实现可以是这样的:
var m=(函数(){
var onCloseCallbacks=[];
返回{
addOnCloseCallback:函数(cb){
onCloseCallbacks.push(cb);
},
关闭:函数(){
控制台日志(“关闭”);
forEach(函数(cb){
cb();
});
}
};
}());
m、 addOnCloseCallback(函数(){
控制台日志(“关闭后”);
});
m、 close()代码>您必须跟踪一系列回调(或仅一个回调)。最简单的实现可以是这样的:
var m=(函数(){
var onCloseCallbacks=[];
返回{
addOnCloseCallback:函数(cb){
onCloseCallbacks.push(cb);
},
关闭:函数(){
控制台日志(“关闭”);
forEach(函数(cb){
cb();
});
}
};
}());
m、 addOnCloseCallback(函数(){
控制台日志(“关闭后”);
});
m、 close()
如果在close
函数中添加this.callback()
该怎么办?它有效吗?回调是处理此问题的一种过时方法-养成使用@Jamiec的习惯。承诺不是事件的解决方案,因为事件可能会发生多次。@nielsteenbeek通常情况下,您只能关闭某个事件一次!从q插入一个回调--“a”是单数。你需要一个发射器。当实现时,您应该能够执行m.on(“close”,function(){…});如果在close
函数中添加this.callback()?它有效吗?回调是处理此问题的一种过时方法-养成使用@Jamiec的习惯。承诺不是事件的解决方案,因为事件可能会发生多次。@nielsteenbeek通常情况下,您只能关闭某个事件一次!从q插入一个回调--“a”是单数。你需要一个发射器。当实现时,您应该能够执行m.on(“close”,function(){…});问题中哪里说他需要多次回调?@Barmar:哪里也没有。我很抱歉。我已经添加了“(或者只有一个)”,但我认为命名一个方法addCallback
意味着可以有更多的方法,而如果它命名为setCallback
,我只希望有一个。问题中哪里说他需要多个回调?@Barmar:没有。我很抱歉。我已经添加了“(或者只有一个)”,但我认为命名一个方法addCallback
意味着可以有更多的方法,而如果它被命名为setCallback
,我希望只有一个。