2010-01-02 51 views
74

我想了解jquery插件語法,因爲我想合併兩個插件到 之一。閃爍器也需要能夠停止間隔或運行多次。jQuery.extend和jQuery.fn.extend的區別?

反正 是此語法相同

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", 

(這是從計時器插件)

感謝,理查德

回答

83

jQuery.extend用於與附加功能擴展任何對象,但1.3中被用於擴展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) 
+0

謝謝,這是清楚分配多個對象,但我仍然不知道什麼時候應該使用jquery.extend。爲什麼你會傳遞你在fn.extend到jquery.extend中做的事情?我也可以爲此發佈一個新問題,因爲我問了兩個問題。 – Richard 2010-01-02 11:54:09

+12

jQuery.extend()實際上是一個便捷函數,可以在您自己的JavaScript代碼中以通用方式擴展對象。它是jQuery中的「實用程序」功能的一部分(不用於DOM操作) – 2010-01-02 12:02:56

64
​​

用法:$.abc()。 (需要像$.ajax()否選擇器。)

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

用法:$('.selector').xyz()。 (需要選擇器,如$('#button').click()。)

主要用於實現$.fn.each()

我希望它有幫助。

18

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原型對象。

+0

我的upvote !!!!對此。我正在查看源代碼,以瞭解jQuery如何自我擴展 – dekdev 2013-07-15 17:41:59

13

This blog post有很好的描述:

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

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

行情:

作爲一般規則,你應該延長功能jQuery對象和方法jQuery.fn對象。一個函數,而不是一個方法,不直接從DOM訪問。

+0

直接從DOM * *訪問方法意味着什麼? '直接來自DOM'的 – 2016-05-18 03:13:07

+0

指的是函數調用vs對象屬性/原型調用(圍繞原生DOM對象的jQuery包裝)的非常基本的JavaScript概念。查看示例並嘗試找出差異,並思考爲什麼示例中的代碼不可互換。 – gavenkoa 2016-05-18 06:20:11

7
$.fn.something= function{}; 

指向jQuery.prototype並通過 「本」 讓訪問DOM元素。現在U可以使用$(selector).something();因此,這可以作爲插件功能類似$(selector).css();

$.something = function{}; 

增加了一個特性或功能的jQuery對象本身和u不能用「這個」爲DOM訪問 現在U可以使用它作爲$.something();這可以作爲一個實用的功能$.trim()

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

允許在它們可以被用來合併兩個對象文本的情況下,我們提供一個以上的對象相同time.Also增加超過1種功能。