0

私はこのコードブロックを手に入れました:

(function($, exports) {
    var mod = function(includes) {
        if (includes) this.include(includes);
    };
    mod.fn = mod.prototype;
    mod.fn.proxy = function(func) {
        return $.proxy(func, this);
    };
    mod.fn.load = function(func) {
        $(this.proxy(func));
    };
    mod.fn.include = function(ob) {
        $.extend(this, ob);
    };
    exports.Controller = mod;

})(jQuery, window);

(function($, Controller) {
    mod = new Controller;
    mod.toggleClass = function(e) {
        this.view.toggleClass("over", e.data);
    };
    mod.load(function() {
        this.test = 'test';
        console.log(this.test); // Delayed
        this.view = $("#view");
    });

    console.log(mod.view) // returns undefined
    console.log(mod);

})(jQuery, Controller);

firefox で実行すると、firebug コンソール パネルの結果は次のようになります。

undefined
Object { toggleClass=function(), proxy=function(), load=function(), more...}
test

これは、最後の 2 つのログ関数 (コード ブロックの下部に配置されている) が最初のログ関数より前に実行されたことを意味します (console.log(this.test); // 遅延)。

なぜこのような流れになったのか説明していただけますか?

4

1 に答える 1

2

なぜこのような流れになったのか説明していただけますか?

(関数内で) 関数参照を jQuery 関数に渡すことloadにより、DOM の準備が整うまで待機するように渡した関数内のコードをセットアップしたためです。関数参照を渡すと、それが のショートカットになります。DOM の準備は、他のコードが実行されるまで行われないため、他の出力が完了するまで、渡す関数の内容からの出力は表示されません。load$$(document).ready(...)load

于 2012-12-28T07:48:31.940 に答える