JQuery.extend और jQuery.fn.extend के बीच अंतर?


83

मैं jquery प्लगइन सिंटैक्स को समझने की कोशिश कर रहा हूं, क्योंकि मैं दो प्लगइन्स को एक में मर्ज करना चाहता हूं। ब्लिंकर जिसे डी अंतराल को रोकने या कई बार चलाने में सक्षम होना चाहिए।

वैसे भी, क्या यह वाक्यविन्यास वैसा ही है

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.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",

(यह टाइमर प्लगइन से है)


यदि आपका शिक्षण कस्टम jQuery प्लगइन विकास मैं इस सूत्र को पढ़ने की सलाह देता हूं तो stackoverflow.com/questions/1117086/…
CrandellWS

जवाबों:


89

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

jQuery.fn.extend :

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

// creates 2 plugin functions (x and y)

1
धन्यवाद, कई ऑब्जेक्ट्स असाइन करने के बारे में स्पष्ट है, लेकिन मुझे अभी भी यकीन नहीं है कि किसी को jquery.extend का उपयोग करना चाहिए। आप कुछ ऐसा क्यों करेंगे जो आप fn.extend में jquery.extend में करते हैं? मैं इसके लिए एक नया प्रश्न भी पोस्ट कर सकता हूं, क्योंकि मैंने दो प्रश्न पूछे थे।
रिचर्ड

13
jQuery.extend () वास्तव में एक सुविधा फ़ंक्शन है जिसका उपयोग आपके जावास्क्रिप्ट कोड में एक सामान्य तरीके से ऑब्जेक्ट्स को विस्तारित करने के लिए किया जा सकता है। यह jQuery में "उपयोगिता" कार्यों का हिस्सा है (डोम हेरफेर के लिए उपयोग नहीं किया गया है)
फिलिप लेबेर्ट

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

उपयोग: $.abc()। (कोई चयनकर्ता आवश्यक नहीं है $.ajax()।)

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

उपयोग: $('.selector').xyz()। (चयनकर्ता आवश्यक है $('#button').click())

मुख्य रूप से इसे लागू करने के लिए उपयोग किया जाता है $.fn.each()

मुझे उम्मीद है यह मदद करेगा।


20

JQuery.extend और jQuery.fn.extend के बीच अंतर?

दरअसल, उनके आधार संदर्भ के अलावा कोई नहीं है। में jQuery स्रोत , आप पढ़ सकते हैं:

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

तो यह कैसे काम करता है? प्रलेखन पढ़ता है:

दो या दो से अधिक वस्तुओं की सामग्री को पहली वस्तु में मिला देता है।

यह सिर्फ एक फॉर-इन-लूप है जो संपत्तियों को कॉपी करता है, नेस्टेड ऑब्जेक्ट्स को फिर से भरने के लिए एक झंडे के साथ तैयार होता है। और एक अन्य विशेषता:

यदि केवल एक तर्क को आपूर्ति की जाती है $.extend(), तो इसका मतलब है कि लक्ष्य तर्क छोड़ दिया गया था

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

इसलिए यदि फ़ंक्शन को jQueryस्वयं पर (स्पष्ट लक्ष्य के बिना) कहा जाता है , तो यह jQuery के नामस्थान का विस्तार करेगा। और अगर फ़ंक्शन को jQuery.fn(स्पष्ट लक्ष्य के बिना) कहा जाता है , तो यह jQuery के प्रोटोटाइप ऑब्जेक्ट का विस्तार करेगा जहां सभी (प्लगइन) तरीके स्थित हैं।


मेरा उत्थान !!!! इसके लिए । मैं यह देखने के लिए स्रोत कोड देख रहा था कि jQuery खुद को कैसे बढ़ाता है
dekdev

15

इस ब्लॉग पोस्ट में अच्छा वर्णन है:

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

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

उल्लेख। उद्धरण:

एक सामान्य नियम के रूप में, आपको कार्यों के लिए jQuery ऑब्जेक्ट और विधियों के लिए jQuery.fn ऑब्जेक्ट का विस्तार करना चाहिए। एक फ़ंक्शन, एक विधि के विपरीत, सीधे DOM से एक्सेस नहीं किया जाता है।


1
'DOM से सीधे' पद्धति तक पहुँचने का क्या मतलब है ?
डैन निसेनबाम

1
directly from the DOMफ़ंक्शन कॉल बनाम ऑब्जेक्ट प्रॉपर्टी / प्रोटोटाइप कॉल (देशी डोम ऑब्जेक्ट्स के आसपास jQuery आवरण पर) की बहुत मूल जावास्क्रिप्ट अवधारणा को संदर्भित करता है। उदाहरण देखें और अंतर खोजने की कोशिश करें और सोचें कि उदाहरणों में कोड विनिमेय क्यों नहीं है।
गवेंको

10
$.fn.something= function{};

jQuery.prototyp को इंगित करता है और "यह" के माध्यम से डोम तत्वों को एक्सेस करने देता है। अब आप यू का उपयोग कर सकते हैं $(selector).something();तो यह प्लगइन की तरह काम करता है$(selector).css();

$.something = function{};

खुद को jQuery ऑब्जेक्ट में एक संपत्ति या फ़ंक्शन जोड़ता है और आप डोम एक्सेस के लिए "इस" का उपयोग नहीं कर सकते हैं अब आप इसे यूज कर सकते हैं $.something(); यह एक उपयोगिता समारोह के रूप में काम करता है$.trim()

परंतु

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

एक ही समय में 1 से अधिक फ़ंक्शन जोड़ने की अनुमति देता है। इसके अलावा, हम एक वस्तु से अधिक वस्तु प्रदान करने के मामले में दो ऑब्जेक्ट शाब्दिक विलय करने के लिए इस्तेमाल किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.