8

我使用“函数”技术创建了一个简单的 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;
4

1 回答 1

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

于 2013-01-16T12:37:17.873 回答