您好我刚刚开始使用JQuery插件,但我在理解命名空间时遇到了一些问题。
鉴于以下示例,当我输入“submit”函数时,如何在submit函数中获取原型实例?比如“var self = this;”在另一个功能?在该方法中,这是指表单元素。
(function ($, window, document, undefined) {
var PluginPrototype = {
init: function (options, element) {
var self = this;
$(element).find('form').submit(self.submit);
self.otherMethod();
},
submit: function(){
var self = this; // the form element
},
otherMethod: function () {
var self = this; // the prototype
},
}
$.fn.pluginname = function (options) {
return this.each(function () {
var plugin = Object.create(PluginPrototype);
plugin.init(options, this);
$.data(this, 'pluginname', comment);
// Get it by
// $.data($(select)[0], 'comment');
});
};
$.fn.pluginname.Settings = {
};
}(jQuery, window, document));
答案 0 :(得分:2)
实际上,这里有一些被误解的概念:
您的案例中没有“原型实例”。当Prototype用作构造函数时,Prototype是函数的属性。在你的情况下,PluginPrototype只是一个普通的对象,它的原型是Object.prototype。
“this”是一个包含当前函数执行上下文的关键字,可以根据 调用给定函数进行修改。
我建议在这里阅读一些关于jQuery插件开发的内容:http://learn.jquery.com/plugins/
那就是说,我可以建议一种典型的方法:
将插件的所有方法都作为“方法”对象的属性(您当前的 PluginPrototype )
在$ .fn.pluginName函数中实现逻辑以处理不同的执行请求。
return this.each(function() {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(parameters, 1));
} else if ( typeof method === "object" || ! method ) {
return methods.init.apply(this, parameters);
} else {
$.error("Method "+method+"does not exist on my wonderful plugin");
}
});
一个。插件初始化通过$(“...”)。plugin({option:value,...});
调用湾插件方法通过$(“...”)。plugin(“方法名称”,参数1,参数2,...)调用;
将使用“this”调用所有方法,指向当前jQuery包装的dom元素;所以,要从另一个方法中调用一个方法,你将使用:
methods.methodName.call(this, argument1, argument2);
希望这会对你有所帮助。