我正在尝试在jquery插件中使用.proxy()方法。不知道发生了什么,但它不是在调用methods.strobe。我有以下示例代码:
(function($) {
var settings = {
}
var methods = {
init: function(options) {
alert('init fired');
$.proxy(methods.strobe,this);
return this;
},
destroy: function() {
},
strobe: function(){
alert('strobe fired');
},
show: function() {},
hide: function() {},
refresh: function() {}
};
$.fn.notify = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.notify');
}
};
})(jQuery);
$().notify();
我有这个jsfiddle进行测试:http://jsfiddle.net/CZqFW/
任何输入都将不胜感激。
答案 0 :(得分:6)
jQuery proxy()
返回一个函数,该函数用第二个上下文关闭第一个参数。
您可以调用返回的函数,它将立即执行。
$.proxy(methods.strobe,this)();
这为您提供的唯一内容是替换this
的{{1}}上下文。您可以使用javascript的methods.strobe()
函数来完成同样的事情:
call()
您的jQuery插件已将methods.strobe.call(this);
设置为$ .fn.notify上的方法。所以你也可以这样称呼它:
strobe()
答案 1 :(得分:4)
$.proxy(methods.strobe,this);
返回一个调用strobe
方法但始终绑定到this
的新函数。它实际上并不调用scrobe
函数。所以,你需要做的是实际调用该函数:
var strobe = $.proxy(methods.strobe,this);
strobe();