jQuery:扩展,添加新功能和构建插件?

时间:2009-10-19 20:29:38

标签: jquery

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

1 个答案:

答案 0 :(得分:7)

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

在jQuery源代码中 - extend()定义一次并在两个名称空间中使用:

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

从技术上讲,所有这个功能都是将对象属性合并在一起。

因此,在最基本的用例中,您只需将两个对象合并为一个对象(非常类似于插件中的选项参数):

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

plain-jane $ || jQuery命名空间上的extend函数只是将该函数添加为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()函数。它在两个名称空间中定义。它首先在$ namespace中定义,take和element作为第一个参数。它稍后扩展到$ .fn并简单地调用第一个函数,第一个参数设置为'this。'。

希望这就是你要找的东西!