3

複数のコールバックを 1 つの関数変数にグループ化できるコールバック ヘルパーを作成しました。

function chainCallbacks() {
    var callbacks = arguments;
    return function () {
        for(var i = 0; i < callbacks.length; i++) {
            if(callbacks[i] != null) {
                callbacks[i].apply(null, arguments);
            }
        }
    };
}

これは機能しますが、同じ機能を提供する JavaScript ライブラリがあるかどうか疑問に思っていますか? またはさらに良いことに、.NET の「イベント」パターンをシミュレートするものはありますか?

myEvent+=myCallback;
4

2 に答える 2

2

chainCallbacks 関数を変更しました。以下のコードを JS コンソールでテストし (私は Chrome を使用しています - 正常に動作します)、結果を確認できます。

var result = 0;

function a() {
        result += 5;
        console.log(result);
        _next();
}

function b() {
        result += 10;
        console.log(result);
        _next();
}

function c() {
        result += 20;
        console.log(result);
        _next();
}

function chainCallbacks() {

    var _this = this;
    var _counter = 0;
    var _callbacks = arguments;

    var _next = function() {
        _counter++;
        if(_counter < _callbacks.length) {
            _callbacks[_counter].apply(_this);
        }
    };

    _this._next = _next;

    return function() {
        if(_callbacks.length > 0) {
            _callbacks[0].apply(_this);
        }
    };
}

var queue = chainCallbacks(a, b, c);
queue();

アイデアは単純です_next()。コールバック関数の実行が終了するたびに呼び出し、別の関数にジャンプしたいということです。したがって、たとえば、いくつかの jQuery アニメーションの後で呼び出すこともできます_next()。このようにして、関数の順序を保持できます。

于 2013-04-23T03:07:39.480 に答える