मैंने इसे एक प्लगइन में देखा:
var options = $.extend(defaults, options);
यह कैसे काम करता है?
क्या करता extend()
है?
मैंने इसे एक प्लगइन में देखा:
var options = $.extend(defaults, options);
यह कैसे काम करता है?
क्या करता extend()
है?
जवाबों:
दस्तावेज़ यह बताने में सटीक नहीं है कि काम कैसे आगे बढ़ता है, इसलिए मैंने थोड़ा परीक्षण किया:
var a = {foo: 1, bar: 1};
var b = {foo: 2, baz: 2};
var c = {foo: 3};
var r = jQuery.extend(a,b,c);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar + " Baz=" + a.baz);
console.log("B: Foo=" + b.foo + " Bar=" + b.bar + " Baz=" + b.baz);
console.log("C: Foo=" + c.foo + " Bar=" + c.bar + " Baz=" + c.baz);
console.log("R: Foo=" + r.foo + " Bar=" + r.bar + " Baz=" + r.baz);
console.log("A === R?: " + (a === r));
( console.log
फ़ंक्शन का उद्देश्य फायरबग में काम करना है, इसे अलर्ट के साथ बदलें () या यदि आप चाहें तो कुछ अन्य आउटपुट फ़ंक्शन करें)।
परिणाम हैं:
A: Foo=3 Bar=1 Baz=2
B: Foo=2 Bar=undefined Baz=2
C: Foo=3 Bar=undefined Baz=undefined
R: Foo=3 Bar=1 Baz=2
A === R?: true
इसके द्वारा हम देख सकते हैं कि jQuery.extend ():
यह विकल्प का पूरा सेट प्राप्त करने के लिए उपयोगकर्ता और डिफ़ॉल्ट विकल्प-वस्तुओं के संयोजन के लिए उपयोगी है:
function foo(userOptions) {
var defaultOptions = {
foo: 2,
bar: 2
};
var someOtherDefaultOptions = {
baz: 3
};
var allOptions = jQuery.extend(
defaultOptions,
someOtherDefaultOptions,
userOptions
);
doSomething(allOptions);
}
foo({foo:1, baz:1});
ध्यान दें कि "अशक्त" ओवरराइटिंग के लिए एक वैध मूल्य है, लेकिन "अपरिभाषित" नहीं है। आप इसका उपयोग करने में सक्षम हो सकते हैं।
var a = {foo: "a", bar: "a"};
var b = {foo: null, bar: undefined};
jQuery.extend(a,b);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar);
का परिणाम:
A: Foo=null Bar=a
यदि आप केवल एक ऑब्जेक्ट पास करते हैं jQuery.extend()
, तो jQuery मान लेता है कि jQuery
ऑब्जेक्ट खुद "पहला" पैरामीटर है (यानी: जिसे संशोधित किया जाना है), और आपकी वस्तु "दूसरी" है (यानी: पहले जोड़ने के लिए) । इसलिए:
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
का परिणाम:
Before: undefined
After: 1
{zed: 'dark'}
बजाय कहा 2
और आप सेट करते हैं r.baz.zed = 'light'
, तो मूल्य क्या होगा b.baz.zed
? यानी संपत्तियों को संदर्भ द्वारा कॉपी या मर्ज किया जाता है?
यह एक वस्तु की सामग्री को दूसरे में विलय कर देता है । यदि हम दो ऑब्जेक्ट पास करते हैं, तो पहले ऑब्जेक्ट / पहले पैरामीटर में दूसरी ऑब्जेक्ट गुण जोड़े जाते हैं
Ex: $.extend(object1, object2);
अब ऑब्जेक्ट 1 में ऑब्जेक्ट 2 के गुण हैं
यदि हम दो वस्तुओं को मर्ज करना चाहते हैं , तो हमें पहले पैरामीटर में खाली ऑब्जेक्ट को पास करना होगा
Ex: var newObject = $.extend({}, object1, object2);
अब newObject में object1 और object2 दोनों के गुण हैं ।
JQuery में कैसे काम करता है? [हल]
jQuery की गहरी प्रति और हल्की प्रति है। पहला बूलियन इसे तय करता है, प्रकाश के लिए गहरे और झूठे के लिए सच है।
उदाहरण के लिए:
jQuery.extend (गलत, {'a': {'a1': 1}}, {'a': {'a2': 2}})
परिणाम होगा: {'a': {'a2': 2}} क्योंकि यह हल्की कॉपी है, इसलिए स्तर 1 की तुलना करें।
jQuery.extend (सत्य, {'a': {'a1': 1}}, {'a': {'a2': 2}})
परिणाम होगा: {'a': {'a1': 1, 'a2': 2}} यह कई स्तर की वस्तु (जैसे सरणी का स्तर) के साथ गहरी प्रतिलिपि है
jQuery.extend (ए, बी, सी) के साथ ए, बी, सी वस्तु या सरणी है। फ्लो ओवरराइट b-> a, c -> a (b ओवरराइट a, c ओवरराइड ए ...) होगा, यह फंक्शन वापस आ जाएगा और मान भी बदल जाता है।
उन्नत उदाहरण:
jQuery.extend ({'नंबर_परम': 1})
मामले में आप सिर्फ एक परम पास करें। jQuery खुद को विस्तारित करेगा। कंसोल.लॉग (jQuery ['नंबर_परम']) 1 आउटपुट करेगा।
jQuery.extend (1, {'नंबर_परम': '2'}); यह उदाहरण स्वयं jQuery का नहीं है। पहला पैरामीटर बूलियन होना चाहिए। इस स्थिति में यह {'नंबर_परम': '2'} और jQuery अपडेट नहीं होगा।
jQuery.extend (ए, बी, सी, डी, ई, एफ); ऑर्डर मर्ज होगा। बी -> ए, सी -> ए, डी -> ए, ई -> ए, एफ -> ए (बी ओवरराइड ए, सी ओवरराइड ए ...)। और परिणाम वापसी एक होगी।
a = {'p': 1} के साथ। jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) a वापस आएगा, और a = {'p': 6}। इस फ़ंक्शन के लिए संख्या पैरामीटर असीमित है।
उद्देश्य एक मौजूदा वस्तु का विस्तार करना है। उदाहरण के लिए यदि हमारे पास कोई टेम्प्लेट ऑब्जेक्ट है और हम इसे और अधिक गुणों को जोड़ना चाहते हैं या मौजूदा गुणों को ओवरराइड करना चाहते हैं, तो jquery का विस्तार उपयोगी हो सकता है।
var carObjectTemplate = {
"make": "honda",
"model":"city",
"mileage":"20",
"variant":"petrol"
};
अब अगर हम $.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
इसे बढ़ाना चाहते हैं, तो
यह हमें ouput देगा, कारओबजेक्टटेम्पलेट का विस्तार और जोड़ देगा
{"color":"red"} property and overriding "model" property from "city" to "amaze"
पहला बूलियन पैरामीटर सही / गलत इंगित करना है अगर हमें गहरी या उथली प्रति चाहिए
यह ठीक यही करता है
विवरण : पहली वस्तु में एक साथ दो या अधिक वस्तुओं की सामग्री को मिलाएं।
JQuery.extend पर अधिक ()