我使用'function'技术创建了一个简单的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;
答案 0 :(得分:11)
执行此操作的常用方法是使用一系列回调以及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
代替。