作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我使用“函数”技术创建了一个简单的 javascript 类。在类里面,我有一个 websocket 监听器,它在收到特定消息时触发一个函数。我可以很容易地向它添加一个外部回调,如下所示
function MyClass() {
self = this; // to access main object from methods
// websocket definition
function websocketMessageInterpreter(message){
if(message == "Hello!") onHelloMessageBase();
}
function onHelloMessageBase(param){
// call user defined callback
self.userDefinedCallback(param);
}
this.userDefinedCallback= function(param){}; //default empty callback
}
外部我用它作为
var myObject = new MyClass();
myObject.userDefinedCallback = function(){alert("Someone said hello!");};
有没有模型可以让我做这样的事情?
myObject.userDefinedCallback += function1;
myObject.userDefinedCallback += function2;
也许以后
myObject.userDefinedCallback -= function1;
最佳答案
这样做的通常方法是有一个回调数组,以及像 addCallback(callback)
和 removeCallback(callback)
这样的方法让 API 的用户添加并删除回调。
addCallback
基本上是:
function addCallback(callback) {
if (this.callbacks.indexOf(callback) < 0) {
this.callbacks.push(callback);
}
}
removeCallback
基本上是:
function removeCallback(callback) {
var index;
if ((index = this.callbacks.indexOf(callback)) >= 0) {
this.callbacks.splice(index, 1);
}
}
如果你需要支持像 IE6 这样可能没有 Array#indexOf
的非常老的浏览器,因为你使用的是 jQuery,你可以使用 jQuery.inArray
相反。
关于javascript - 如何向 javascript 方法添加多个回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14358613/
我是一名优秀的程序员,十分优秀!