如何在javascript方法中添加多个回调?

时间:2013-01-16 12:34:46

标签: javascript jquery callback

我使用'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;

1 个答案:

答案 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代替。