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


मैं 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 ऑब्जेक्ट में तत्वों और कुछ तर्क जोड़ने का कारण क्या होगा?

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

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

धन्यवाद, रिचर्ड


76
2018-01-02 09:48


मूल




जवाब:


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)

84
2018-01-02 09:53



धन्यवाद, यह कई ऑब्जेक्ट्स को असाइन करने के बारे में स्पष्ट है, लेकिन मुझे अभी भी यकीन नहीं है कि जब किसी को jquery.extend का उपयोग करना चाहिए। आप jquery.extend पर fn.extend में जो कुछ करते हैं उसे क्यों पास करेंगे? मैं इसके लिए एक नया प्रश्न भी पोस्ट कर सकता हूं, क्योंकि मैंने दो प्रश्न पूछे थे। - Richard
jQuery.extend () वास्तव में एक सुविधा फ़ंक्शन है जिसका उपयोग सामान्य रूप से ऑब्जेक्ट्स को विस्तारित करने के लिए आपके अपने जावास्क्रिप्ट कोड में किया जा सकता है। यह jQuery में "उपयोगिता" कार्यों का हिस्सा है (डीओएम हेरफेर के लिए उपयोग नहीं किया जाता है) - Philippe Leybaert


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

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

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

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

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

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


64
2017-12-21 14:54





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 प्रोटोटाइप ऑब्जेक्ट का विस्तार करेगा जहां सभी (प्लगइन) विधियां स्थित हैं।


18
2018-02-11 20:04



मेरा अपवित्र !!!! इसके लिए । मैं यह देखने के लिए स्रोत कोड देख रहा था कि jQuery स्वयं कैसे विस्तार करता है - dekdev


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

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

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

उद्धरण:

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


13
2018-03-13 12:10



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


$.fn.something= function{};

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

$.something = function{};

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

परंतु

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

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


7
2018-03-07 23:12