我有这个代码块:
(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
这意味着最后两个日志函数(它们位于代码块的底部)在第一个之前执行(即:console.log(this.test); //延迟)
你能用这种方式解释为什么流程会发生吗?
答案 0 :(得分:2)
你能用这种方式解释为什么流程会发生吗?
因为您在传递给load
的函数中设置代码以等待DOM准备好,通过(在load
函数内)将函数引用传递给jQuery $
函数。当你传递一个函数引用时,这是$(document).ready(...)
的快捷方式。 DOM准备就绪,直到你的其他代码运行之后才会发生,因此在你的其他输出之后,你不会看到你传递到load
的函数内容的输出。