jQuery.extend和jQuery.fn.extend之间的区别?

时间:2010-01-02 09:48:15

标签: jquery syntax plugins extend

我试图理解jquery插件语法,因为我想合并两个插件 一。闪光灯也需要能够停止de间隔或运行多次。

反正 这个语法与

相同
jQuery.fn.extend({
    everyTime: function(interval, label, fn, times) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, times);
        });
    },
    oneTime: function(interval, label, fn) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, 1);
        });
    },

:此

$.fn.blink = function(options)
    {

因为它看起来像第一个(没有=)是一次设置多个方法的方法。 这是正确的吗? 我也在这里 将元素和一些逻辑添加到jquery对象的原因是什么?

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(这是来自计时器插件)

5 个答案:

答案 0 :(得分:87)

jQuery.extend用于扩展具有附加功能的任何对象,但jQuery.fn.extend用于扩展jQuery.fn对象,实际上它一次性添加了几个插件函数(而不是分别分配每个函数)

<强> jQuery.extend

var obj = { x: function() {} }

jQuery.extend(obj, { y: function() {} });

// now obj is an object with functions x and y

<强> 1.3中

jQuery.fn.extend( {
        x: function() {},
        y: function() {}
});

// creates 2 plugin functions (x and y)

答案 1 :(得分:68)

jQuery.extend({
    abc: function(){
        alert('abc');
    }
});

用法: $.abc() 。 (不需要选择器,如$.ajax()。)

jQuery.fn.extend({
    xyz: function(){
        alert('xyz');
    }
});

用法: $('.selector').xyz() 。 (选择器需要$('#button').click()。)

主要用于实现$.fn.each()

我希望它有所帮助。

答案 2 :(得分:19)

  

jQuery.extend和jQuery.fn.extend之间的区别?

实际上,除了他们的基准参考之外没有其他任何东西。在jQuery source中,您可以阅读:

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

那它是如何运作的? documentation读取:

  

将两个或多个对象的内容合并到第一个对象中。

它只是一个for-in-loop,它复制属性,用一个标记来追加嵌套对象。另一个特点是:

  

如果只向$.extend()提供了一个参数,则表示省略了目标参数

 // then the following will happen:
 target = this;

因此,如果函数在jQuery本身上调用(没有显式目标),它将扩展jQuery名称空间。如果函数在jQuery.fn上调用(没有显式目标),它将扩展所有(插件)方法所在的jQuery原型对象。

答案 3 :(得分:16)

This blog post有很好的描述:

$.fn.extend({
myMethod: function(){...}
});
//jQuery("div").myMethod();

$.extend({
myMethod2: function(){...}
});
//jQuery.myMethod2();

行情:

作为一般规则,您应该扩展函数的jQuery对象和方法的jQuery.fn对象。与方法相反,函数不能直接从DOM访问。

答案 4 :(得分:9)

$.fn.something= function{};

指向jQuery.prototype并允许通过“this”访问dom元素。现在你可以使用$(selector).something();所以这就像$(selector).css();

这样的插件函数
$.something = function{};

向jQuery对象本身添加属性或函数,你不能使用“this”进行dom访问 现在你可以将它用作$.something();这作为$.trim()

的效用函数

但是

$.fn.extend({function1(), function2()}) and  $.extend({function1(), function2()}) 

允许同时添加多个函数。如果我们提供多个对象,它们也可用于合并两个对象文字。

相关问题