2009-10-19 83 views
5

今天,我唯一关于jQuery的紧迫问题是关于何时使用jQuery.extend()jQuery.fn(它用于插件)。罗勒高盛似乎在“Defining your own functions in jQuery”有一个解释,但由于某种原因,我仍然不满意,我有最好的信息。一旦我们开始与jQuery.fn合作,我们就必须考虑是否应该建立一个完整的插件。这意味着三个问题:扩展,添加新功能和构建插件。应该有一个解释结合所有三个。这值得解释吗?我们有一个解释吗?jQuery:扩展,添加一个新功能并构建一个插件?

回答

7

我想你可能会觉得太辛苦。 :)

在jQuery的源 - 延伸()被定义一次并且在两个命名空间中使用:

jQuery.extend = jQuery.fn.extend = function() { .. }; 

从技术上讲,所有这些功能不是合并在一起的对象属性。

所以在最基本的使用情况下,您只需合并两个对象为单一对象(很像插件选项参数):

this.options = $.extend({}, defaultOptions, userOptions); // Just mergin' objects 

平原上简$ || jQuery的命名空间的扩展功能只是将该函数添加为jquery名称空间中类似静态的函数。继承jQuery名称空间的函数通常是那些不需要元素进行操作的函数。这些函数就像isArray()和isFunction()以及更多。

var noWhiteSpace = $.trim(string); // No element needed 

jQuery.fn或多或少地保留用于执行基于传递到jquery对象的元素的动作的函数。这些就像普通的插件,以及你在jQuery中习惯的大多数东西。

$('div').css('border', '1px solid green'); // Do work on a set of elements 

更有趣的是,如果你看看jQuery源代码中的$ .data()函数。它在两个名称空间中定义。它首先在$命名空间中定义,并将and元素作为第一个参数。它稍后扩展到$ .fn,并简单地将第一个参数设为'this'。

希望这就是你要找的!

+0

我很感谢你的回答!我已经将YUI 2.x的遗留代码移植到jQuery中(可能),所以我必须认为“很难”;现在,当你有一堆“私有”支持时,需要构建一个插件功能为“公共”扩展功能---对吗? – rasx 2009-10-19 22:29:22

+0

这将是使用插件的原因,是的! – 2009-10-19 22:44:51