23-讨论
5.5.3 讨论
据报道,作曲家伊戈尔·斯特拉文斯基曾经说过:“好的作曲家借用别人的想法,伟大的音乐家则将其窃为己有。”这句话明显剽窃了T.S. 艾略特的名言,艾略特曾经写过:“不朽的诗人模仿;成熟的诗人剽窃。”
好主意来自许多地方,其他JavaScript程序库充满了好的代码和思路。如果其他开放源码程序库中有你可以使用的代码,或者可以转移到jQuery中的代码,你完全可以使用它们——但是你要尊重其他作者的版权和许可。
注意
关于开放源码和免费软件的信息可以参加如下网站:
本例中的实现非常简单,缺少的只是一个“radio类”方法的思路,在这种情况下你甚至不需要实际的代码。尽管不是必需的,但是对思路的来源表示感谢还是一个很有礼貌的做法。
不管思路是来源于其他地方还是你自己的思考,在许多情况下,你都可以花费一行或者少数几行代码编写有用的jQuery插件。
什么是jQuery.fn?为什么jQuery插件要使用它?
jQuery.fn与jQuery.prototype引用同一个对象。当在jQuery.fn对象中添加一个函数时,实际上就把函数添加到jQuery.prototype中。 当用jQuery()或$()创建一个jQuery对象时,实际上调用的是new jQuery()。(jQuery代码自动为你添加new操作。)和其他JavaScript构造器一样,jQuery.prototype为每个new jQuery()调用返回的对象提供方法和默认属性。所以,当编写jQuery.fn插件时,实际上进行的是传统的面向对象JavaScript编程,用构造器的原型向对象添加一个方法。 那么为什么存在jQuery?而不像其他面向对象JavaScript代码那样使用jQuery.prototype?这并不只是为了少输入几个字符。 jQuery最初的版本(在1.0发行之前很长的时间)不使用JavaScript的prototype功能为jQuery对象提供方法。它通过循环读取对象将jQuery.fn(后称$.fn)中的每个属性和方法的引用复制到jQuery对象中。 因为对象中可能有数百个方法,每次调用$()都进行复制可能相当缓慢。所以,把这段代码改成使用JavaScript原型,消除了所有复制工作。为了避免破坏已经使用$.fn的插件,将它作为$.prototype的别名:$.fn = $.prototype ;这就是为什么jQuery.fn到今天还存在的原因——插件早在2006年初期就使用了$.fn!