所以有这个很棒的jQuery库,你可以使用它完成令人惊奇的东西。写得少,做得更多 - 确实。
但是每家商店都可能觉得他们有一些反复出现的使用模式(相同的小部件,相同的对话,相同的东西),并且因为他们总是使用jQuery,他们认为将jQuery扩展一点以便合并他们的自定义内部内容很方便。
现在让我对“扩展”这个小词的含义进行扩展,我将通过描述当前工作场所的情况来做。该商店的JavaScript人员已经在版本X(相当近期)制作了jQuery库的副本,并添加了他们自己的一些东西。事实上,内部的内容基于jQuery SDK,据我所知,很多人都不知道,因为从2011年4月6日起谷歌似乎并不知道。你可以看到它有一个jQuery.ready
函数,我可以告诉它不是股票jQuery库的一部分。好吧,他们扩展了jQuery。
jQuery.ready
函数是开始讨论已采取的方法的潜在(和明显)缺点的好地方。好吧,你认为ready
意味着准备就绪,但唉,事实并非如此:不是在DOM足够准备就绪时注册一个回调,而是<script>
一出现就会执行解析。这是违反直觉的;他们应该调用函数jQuery.notReady
,这本来是公平的。
公平,因为我是该修改过的库的用户。而且这个缺陷不是唯一的一个,我还发现ep.ajax
函数应该表现得像jQuery.ajax
,但有一些扩展,不会执行success
回调。 [为了正确性而更新:执行回调的失败是由于回调代码访问了一个不相关的属性。]另外,由库的修改版本的dialog
函数调用的简单对话看起来很破坏工作正常。
(我真的认为你应该永远不会从用户那里拿走一个着名的,优秀的,可靠的API,只是为了能够添加一些自定义的东西 - 更不用说,你应该改变那个API,即使你是不打算打破它。)
这让我想到了我的问题,可能很容易回答。这些缺陷,如果没有必要,那么至少在扩展jQuery时会遇到常见的反冲?我问,因为到目前为止我不是JavaScript或jQuery专家,但我知道使用其他编程语言,完全可以在不改变原始库版本的情况下以干净的方式扩展对象系统。事实上,你永远不会那样做,因为那时你自己有QA,错误修正,更新,文档等等。那么这笔交易是什么?这在JavaScript中是不可能的吗?或者他们只是在扩展jQuery的工作?您将如何以干净的方式扩展jQuery和jQuery UI?指针欢迎。谢谢。
答案 0 :(得分:2)
真的,非常容易来扩展jQuery!
这就是为什么jQuery的插件非常丰富的原因。
请看这个页面:http://docs.jquery.com/Plugins/Authoring
总而言之,您需要做的就是:
$.fn.myPlugin = function() {
// 'this' refers to the jQuery collection
return this.each(function() {
// now 'this' refers to each element in
// the jQuery collection
});
};
您可以做的最糟糕的事情是将您的插件(jQuery的扩展名)命名为与现有jQuery方法相同的名称,例如css
。实际上,您希望保持jQuery不变,只需在此之后添加任何插件,为您提供所需的其他功能/小部件。
答案 1 :(得分:1)
要扩展jQuery,请写一个plugin。 jQuery有一个出色的插件架构,允许干净的扩展 - 这是它受欢迎的原因之一。
你不想做的是将jQuery派生成你自己的内部my-jquery-1.5.1.js或类似的东西,并开始编辑代码本身。在这种情况下,您可以从任何有意义的升级路径中脱身。如果jQuery作者发现了一个主要的错误,你不能只通过修补程序获取最新版本 - 你必须将你的更改合并到最新版本中,或者将错误修复程序合并到你的自定义版本中。
所以是的,有一种干净且适当的方式来扩展jQuery。写一个插件或其中许多。分叉可能是一个错误的解决方案。