假设没有其他类似的框架,并忽略了jQuery依赖性和潜在性能开销的潜在缺陷。
我想知道何时应该将一组有凝聚力的JavaScript函数编码为jQuery插件。当然,涉及到很多主观性和上下文 - 也许应该描述一个关于沿着jQuery路径走下去的最重要情况的目录。
我的主要研究领域是:
我希望JavaScript代码是: - 标准 - 易于阅读/修改 - 更可预测 - 最小的错误(让我们忽略IDE和CoffeeScript和其他技术,但要考虑减少人为错误的好处)
希望这个问题清晰而简洁,以便在这个非常具体的设计问题上为所有JavaScript编码人员提供一些有用的答案。
答案 0 :(得分:2)
JQuery插件 是 JavaScript 等效的扩展方法。我们来看一下插件语法:
$.fn.stretch = function(multiple) {
this.each(function() {
var $t = $(this);
$t.height($t.height * multiple);
$t.width($t.width * multiple);
});
return this;
};
我创建了一个插件,它将传递的倍数所选元素的高度和宽度相乘。 (请注意,为了演示目的,这一起被拍了一下)。
$('#smallDiv').stretch(2);
该方法在$(this)
上运行,它附加到的对象,并返回一个对象,允许进一步
以下是一系列 JQuery Plugin Design Patterns 的良好指南 - 一些用于优化性能,另一些用于互操作性/链接,可变性等。
1)链接
$('#smallDiv').css("background-color", "beige").stretch(2);
2)重新使用
我承认这是一个强迫的例子,但仍然......
$('#smallDiv').stretch(2).stretch(1.5);
3)范围的模块化
我们的插件中的代码无需担心变量范围。它只使用局部变量完全自包含。
4)可读性
我在此假设您的插件已正确命名为
插件在很多方面都很有用
我怀疑90%的插件用于DOM操作。链接是一个很大的优势。
但是 JQuery 已经有很多数组扩展方法:
$.distinct([1, 2, 2, 3])
$.union([1, 2, 2, 3], [2, 3, 4, 5, 5])
$.intersect([1, 2, 2, 3], [2, 3, 4, 5, 5])
$.except([1, 2, 2, 3], [2, 3, 4, 5, 5])
(所有的anove从Kristian Abrahamsen借来GitHub Repo)
存在字符串,Cookie等插件,可以/应该考虑
全球并不总是高尚的:您可以在任何事情上使用漂亮的新stretch()
插件。是好还是坏?你决定。谁应该使用它?谁不该?应该使用哪些元素?
如果您不想重复使用,请不要创建插件。我确信您团队中的大量开发人员过于富有创造力。
规划是必须的!请参阅此Brolick博客Guide to Developing Plugins
在Brolick指南和模式参考之间,您会注意到由于草率插件开发而导致的许多错误和问题。其中最常见的是性能不佳和内存泄漏。两者都被低估了潜在的严重性,并且在插件开发中频繁且频繁。