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);
    }
}

Array#indexOfjQuery を使用しているため、IE6 などの非常に古いブラウザーをサポートする必要がある場合、 jQuery.inArray.

于 2013-01-16T12:37:17.873 に答える