Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';向以下模块添加回调的最佳方法是什么?_Javascript_Jquery - Fatal编程技术网

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
,我希望只有一个。