2

スクリプト内の関数ごとにイベントを作成し、関数の最後にイベント トリガーを挿入したいと考えています。

このようにして、各関数がいつ完了したかを正確に確認し、他の関数のフックのようなイベントを使用できます

動的に実行できる場合は、これらのイベントを作成して追加することなく、好きなだけ新しい関数を追加できます。

これは私がやろうとしていることの基本的な例です。これは実際には機能しませんが、アイデアは得られます。私は jQuery を使用してきましたが、すべての JavaScript フレームワークと任意のメソッドを受け入れます。

var obj = {};

(function()
{
    this.init = function()
    {
        // loop through every function
        $.each(this, function(k, v)
        {
            // create an event for every function
            $('body').bind(v, function()
            {
                 console.log('Event: ' + v + ' Finished');
            });

            // Add a event trigger into each specific function in the loop
            this[v].call($('body').trigger(v));
        });
    }

    this.another_function = function()
    {
        // do something
    }

    this.some_function = function()
    {
         /do something
    }

}).apply(obj);

obj.init();

ありがとう

(編集) スクリプト自体は基本的に Calendar をレンダリングしますが、多くのコールバック、ajax リクエスト、ボタンがあります。など...各機能をイベントに結び付けることができれば、それを拡張したり、新しい機能を追加したりするときに私の人生が楽になります...

4

1 に答える 1

1

すべての関数をループし、同じオブジェクトで元の関数を呼び出し、本体でイベントをトリガーする新しい関数に置き換えます。

var obj = { };

(function()
{
    this.init = function()
    {
        var self = this;
        foreach(var name in this) {
            if (typeof k !== 'Function') continue;
            if (name ==='init') continue;

            var original = this[name];

            var newFunc = function() {
                original.apply(self, arguments);
                $('body').trigger(name);
            }

            this[name] = newFunc;
        } 
    }

this.another_function = function()
    {
        // do something
    }

this.some_function = function()
    {
         /do something
    }

}).apply(obj);

obj.init();
于 2012-10-03T16:16:48.470 に答える