我尝试了解following code。确切地说,研究方法是$ .proxy()。在我得到这个剧本之前,一切都很清楚:
(function($, exports){
var mod = function(){};
mod.fn = mod.prototype;
mod.fn.proxy = function(func){
return $.proxy(func, this);
};
mod.fn.load = function(func){
$(this.proxy(func));
};
exports.Controller = mod;
})(jQuery, window);
(function($, Controller){
var mod = new Controller;
mod.toggleClass = function(e){
this.view.toggleClass("over", e.data);
};
mod.load(function(){
this.view = $("#view");
this.view.mouseover(this.proxy(this.toggleClass));
this.view.mouseout(this.proxy(this.toggleClass));
});
})(jQuery, Controller);
我不明白$ .proxy()在这部分是如何工作的:
mod.fn.load = function(func){
$(this.proxy(func)); // Why it is converted into an object jQuery?
};
任何人都可以解释一下这是如何运作的吗?
答案 0 :(得分:0)
它不是一个jQuery对象,$(this.proxy(func));
正在将传递给load方法的函数注册为dom ready handler,这样即使在dom准备好之前调用load
方法,回调函数也是推迟到dom准备好了。如果dom已经处于就绪状态,那么将立即执行回调。
mod.fn.load = function (func) {
console.log('inside load')
$(this.proxy(func));
console.log('exit load')
};
演示:Fiddle
与
相同mod.fn.load = function (func) {
var self = this;
//dom ready callback
$(function(){
func.call(self);
});
};
演示:Fiddle
如果您没有这样做,则脚本可能会失败,如
mod.fn.load = function (func) {
var self = this;
console.log('inside load');
func.call(self);
console.log('exit load')
};
演示:Fiddle