我想创建一个 jQuery 插件来包装图表组件。它将具有 addLineSerie 或 addBarsSerie 等功能。然后我想创建其他插件来扩展这个插件以添加新功能或覆盖所需的内容,但仍然能够调用原始插件功能。
我从下面的方法开始。它有点有效,但是,正如我后来意识到的那样,我无法调用原始的“父”实现(如果我创建 myB 的实例,我无法调用 myA.goA2)。
(function($){
$.fn.myA = function(settings) {
this.goA = function() {alert("goA: "+settings);};
this.goA2 = function() {alert("goA2: "+settings);};
return this;
};
})(jQuery);
(function($){
$.fn.myB = function(settings) {
this.myA(settings);
this.goA2 = function() {alert("goA2B: "+settings);};
this.goB = function() {alert("goB: "+settings);};
return this;
};
})(jQuery);
所以我有两个问题:
- 这种方法正确吗?还是我应该采用不同的方式?
- 如何使“父级”和“子级”成为同一实例并调用“父级”的实现?
谢谢。
请您参考如下方法:
这似乎是正确的,但是要实现跨插件行为,你不能这样做:
(function($) {
$.fn.myA = function(settings) {
this.goA = function() {
alert("goA: " + settings);
};
this.goA2 = function() {
alert("goA2: " + settings);
};
return this;
};
})(jQuery);
(function($) {
$.fn.myB = function(settings) {
this.myA = $.fn.myA(settings);
this.goA2fromA = function() {
this.myA.goA2();
};
this.goA2 = function() {
alert("goA2B: " + settings);
};
this.goB = function() {
alert("goB: " + settings);
};
return this;
};
})(jQuery);
$(document).ready(function() {
var a = $('#one').myA({});
var b = $('#one').myB({});
a.goA2();
b.goA2fromA();
});
编辑:修复了对 myA 的调用并添加了将进行的调用。查看工作 fiddle :
