JavaScript: मान द्वारा ऑब्जेक्ट कैसे पास करें?


96
  • जब वस्तुओं को मापदंडों के रूप में पास किया जाता है, तो जावास्क्रिप्ट उन्हें संदर्भ द्वारा पास करता है और वस्तुओं की स्थानीय प्रतियां बनाना मुश्किल बनाता है।

    var o = {};
    (function(x){
        var obj = x;
        obj.foo = 'foo';
        obj.bar = 'bar';
    })(o)
    

    oहोगा .fooऔर है .bar

  • क्लोनिंग के द्वारा इसे प्राप्त करना संभव है; सरल उदाहरण:

    var o = {};
    
    function Clone(x) {
       for(p in x)
       this[p] = (typeof(x[p]) == 'object')? new Clone(x[p]) : x[p];
    }
    
    (function(x){
        var obj = new Clone(x);
        obj.foo = 'foo';
        obj.bar = 'bar';
    })(o)
    

    oनहीं होगा .fooया .bar


सवाल

  1. क्या स्थानीय प्रतिलिपि / क्लोन बनाने के अलावा, मूल्य द्वारा वस्तुओं को पास करने का एक बेहतर तरीका है?

3
इसे इस्तेमाल करने के लिए आपका क्या मामला है?
जॉन्डविजहोन

2
प्रोग्रामिंग मज़ा। यह देखकर कि क्या नए जेएस इंजनों ने इसे संबोधित किया है (तकनीकी रूप से, यह संदर्भ द्वारा मूल्य से गुजर रहा है), लेकिन मुख्य रूप से मनोरंजन के लिए।
Vol7ron

1
देखें Is जावास्क्रिप्ट एक पास-दर-संदर्भ या पास-दर-मूल्य भाषा? - जावास्क्रिप्ट संदर्भ से नहीं गुजरती है। जावा की तरह, जब किसी फ़ंक्शन को ऑब्जेक्ट पास करते हैं, तो यह मूल्य से गुजरता है, लेकिन मूल्य एक संदर्भ है। यह भी देखें कि क्या जावा को संदर्भ से पास किया जाता है?
रिचर्ड जेपी ले गुएन

1
जहाँ तक मुझे पता है आप वस्तुओं को मूल्य से पास नहीं कर सकते। यहां तक ​​कि अगर वहाँ था, यह प्रभाव है कि क्लोनिंग आप ऊपर उल्लेख कर रहे हैं, तो वहाँ कुछ भी नहीं है कि मैं देख सकता हूँ पाने के लिए है। शायद कोड की 3 लाइनों को बचाने के अलावा।
Thor84no

1
@ vol7ron हां, उन्होंने एक भाषा डिजाइन विशेषता को सही ढंग से लागू करके इसे संबोधित किया है।
जॉन्डविजहोन

जवाबों:


61

ज़रुरी नहीं।

वास्तव में आपको जो चाहिए, उसके आधार पर, एक नई वस्तु के प्रोटोटाइप के रूप में सेट होने की संभावना हो सकती है o

var o = {};
(function(x){
    var obj = Object.create( x );
    obj.foo = 'foo';
    obj.bar = 'bar';
})(o);

alert( o.foo ); // undefined

इसलिए आपके द्वारा जोड़े गए किसी भी गुण को objनहीं जोड़ा जाएगा oobjसंपत्ति के रूप में एक ही संपत्ति के नाम के साथ जोड़ा गया कोई भी गुण संपत्ति oको छाया देगा o

निश्चित रूप से, जोड़ा गया कोई भी गुण यदि वे छायांकित नहीं हैं, तो वे oउपलब्ध होंगे obj, और oप्रोटोटाइप चेन में मौजूद सभी ऑब्जेक्ट को एक ही अपडेट दिखाई देगा o

इसके अलावा, अगर objकोई ऐसी संपत्ति है जो किसी अन्य ऑब्जेक्ट को संदर्भित करती है, जैसे कि ऐरे, आपको ऑब्जेक्ट में सदस्यों को जोड़ने से पहले उस ऑब्जेक्ट को छाया देना सुनिश्चित करना होगा, अन्यथा, उन सदस्यों को जोड़ा objजाएगा, और उन सभी वस्तुओं के बीच साझा किया जाएगा जो है objप्रोटोटाइप श्रृंखला में।

var o = {
    baz: []
};
(function(x){
    var obj = Object.create( x );

    obj.baz.push( 'new value' );

})(o);

alert( o.baz[0] );  // 'new_value'

यहाँ आप देख सकते हैं कि क्योंकि आप पर सरणी शैडो नहीं था bazपर oएक साथ bazपर संपत्ति obj, o.bazसरणी संशोधित हो जाता है।

इसलिए इसके बजाय, आपको इसे पहले छाया देना होगा:

var o = {
    baz: []
};
(function(x){
    var obj = Object.create( x );

    obj.baz = [];
    obj.baz.push( 'new value' );

})(o);

alert( o.baz[0] );  // undefined

3
+1, मैं Object.createअपने उत्तर में भी सुझाव देने जा रहा था , लेकिन मैं प्रतिलिपि की उथल-पुथल को समझाने के लिए खिंचाव नहीं चाहता था ;-)
एंडी ई

+1, मैं इस बारे में भूल गया। मैंने कोशिश की var obj = new Object(x)। मेरे लिए, मुझे लगता है कि डिफ़ॉल्ट रूप से new Object(x)प्रदर्शन करेंगे Object.create(x)- दिलचस्प
Vol7ron

1
@ vol7ron: हाँ, new Object(x)बस उसी वस्तु को वापस बाहर थूकता है (जैसा कि आपने शायद देखा) । यह अच्छा होगा यदि क्लोन करने के लिए एक देशी तरीका था। यकीन नहीं होता अगर वहाँ कुछ भी काम करता है।
user113716

43

इस जवाब की जाँच करें https://stackoverflow.com/a/5344074/746491

संक्षेप में, JSON.parse(JSON.stringify(obj))अपनी वस्तुओं को कॉपी करने का एक तेज़ तरीका है, यदि आपकी वस्तुओं को जसन के लिए अनुक्रमित किया जा सकता है।


2
मैं इससे बचना चाहता हूं क्योंकि वस्तुओं को हमेशा क्रमबद्ध नहीं किया जा सकता है और क्योंकि IE7 / 8 जैसे मध्य आयु वर्ग के ब्राउज़रों में JSONशामिल नहीं है और इसे परिभाषित करने की आवश्यकता है - जैसे नाम के साथ अधिक वर्णनात्मक हो सकता है Clone। हालाँकि, मुझे संदेह है कि भविष्य में मेरी राय बदल सकती है, क्योंकि JSON डेटाबेस और IDEs जैसे गैर-ब्राउज़र आधारित सॉफ़्टवेयर में बहुत अधिक एकीकृत है
vol7ron

1
यदि कोई फ़ंक्शन और दिनांक ऑब्जेक्ट नहीं हैं, तो JSON.parse समाधान सबसे अच्छा लगता है। stackoverflow.com/questions/122102/…
Herr_Hansen

वास्तव में?!? ऑब्जेक्ट कॉपी बनाने के लिए सिर्फ JSON पर सीरियल करें? फिर भी इस बेतुकी भाषा से नफरत करने का एक और कारण।
रयाननर्ड

1
सीरियल JSON वास्तव में इसे कॉपी करने का एक तेज़ तरीका है? NodeJS प्रलेखन के अनुसार JSON हेरफेर सबसे सीपीयू गहन कार्य है। nodejs.org/en/docs/guides/dont-block-the-event-loop/...
हर्षद

38

यहाँ क्लोन फंक्शन है जो ऑब्जेक्ट की गहरी कॉपी करेगा:

function clone(obj){
    if(obj == null || typeof(obj) != 'object')
        return obj;

    var temp = new obj.constructor(); 
    for(var key in obj)
        temp[key] = clone(obj[key]);

    return temp;
}

अब आप इस तरह का उपयोग कर सकते हैं:

(function(x){
    var obj = clone(x);
    obj.foo = 'foo';
    obj.bar = 'bar';
})(o)

3
यह एक गहरा जवाब था।
नाथन

सुंदर! सबसे अच्छा जवाब IMO।
ganders

23

उपयोग Object.assign()

उदाहरण:

var a = {some: object};
var b = new Object;
Object.assign(b, a);
// b now equals a, but not by association.

एक क्लीनर उदाहरण जो एक ही काम करता है:

var a = {some: object};
var b = Object.assign({}, a);
// Once again, b now equals a.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign


4
बेहतर:var b = Object.assign({}, a);
बरगी

माना। तदनुसार जवाब अपडेट करना। इसके अलावा, हर ब्राउज़र असाइन () विधि का समर्थन नहीं करता है। आपकी संगतता आवश्यकताओं के आधार पर, एमडीएन पर पॉलीफ़िल का उपयोग करना आवश्यक हो सकता है।
ब्रैंडन

3
@ ब्रैंडन, आपके द्वारा प्रदान किए गए बहुत लिंक में, यह गहरी क्लोनिंग के लिए चेतावनी देता है: "गहरी क्लोनिंग के लिए, हमें अन्य विकल्पों का उपयोग करने की आवश्यकता है क्योंकि Object.assign () गुण मानों की प्रतिलिपि बनाता है। यदि स्रोत मान किसी ऑब्जेक्ट का संदर्भ है। यह केवल उस संदर्भ मूल्य को कॉपी करता है। "
पिवल्क्स

2
यह काम करता है लेकिन ध्यान रखें कि यह गहरी कॉपी नहीं करता है कि अंदर मौजूद कोई भी ऑब्जेक्ट aसंदर्भ के रूप में कॉपी किया जाएगा।
स्टोइनोव

15

आप इस बारे में थोड़ा भ्रमित हैं कि ऑब्जेक्ट जावास्क्रिप्ट में कैसे काम करते हैं। वस्तु के संदर्भ है चर के मूल्य। कोई गैर-अधिकृत मूल्य नहीं है। जब आप एक ऑब्जेक्ट बनाते हैं, तो इसकी संरचना को मेमोरी में संग्रहीत किया जाता है और चर को उस संरचना का संदर्भ रखने के लिए सौंपा गया था।

यहां तक ​​कि अगर आप जो पूछ रहे हैं, वह किसी प्रकार की आसान, देशी भाषा में उपलब्ध है, तो भी यह तकनीकी रूप से क्लोनिंग होगी।

जावास्क्रिप्ट वास्तव में सिर्फ पास-दर-मूल्य है ... यह सिर्फ इतना है कि पारित मूल्य किसी चीज का संदर्भ हो सकता है।


1
अरे एंडी! मैं इससे भ्रमित नहीं हूं, मुझे उम्मीद थी कि जेएस डिफ़ॉल्ट रूप से क्लोनिंग करेगा। स्वयं क्लोनिंग में बड़ी अक्षमताएं हैं, इसलिए यदि इंजन ने ऐसा किया, तो मुझे यकीन है कि यह बेहतर होगा। मुझे संदेह है कि जरूरत / मांग लाभ से अधिक है, हालांकि।
Vol7ron

12
जेएस में जब लोग मूल्य के बजाय संदर्भ से कहते हैं, तो उनका मतलब है कि मूल्य एक डुप्लिकेट के बजाय एक सूचक की तरह है। यह बहुत अच्छी तरह से स्थापित लिंगो है।
एरिक रेपेने

4
@ एरिक: मेरी विनम्र राय में, मुझे लगता है कि इसे और अधिक स्पष्ट रूप से परिभाषित करना बेहतर है ताकि नए लोगों को भाषा को भ्रमित न करें। सिर्फ इसलिए कि कुछ अच्छी तरह से स्थापित है इसका मतलब यह नहीं है कि यह उचित है या तकनीकी रूप से भी सही है (क्योंकि यह नहीं है)। लोग "संदर्भ द्वारा" कहते हैं क्योंकि उनके लिए यह कहना आसान है कि यह समझाने से कि यह वास्तव में कैसे काम करता है।
एंडी ई

6
मान स्मृति में किसी स्थान का संदर्भ है। अंततः आप अभी भी कॉपी के साथ काम करने के बजाय मेमोरी में एक ही आइटम पर काम कर रहे हैं। नए लोगों की मदद करने के लिए उस अंतर को कैसे अस्पष्ट माना जाता है? यह ओ'रेली के ऑथरिटिव गाइड सहित कई तकनीकी पुस्तकों में बताया गया है कि यह अब अपने पांचवें (ओटी: और बहुत कमजोर अपडेटेड) संस्करण पर है।
एरिक रेपेने

1
@AndyE मैं यह देखने के लिए कि उपद्रव क्या था, पढ़ने के लिए थोड़ा अधिक किया। IMO, यह इस तरह का मुद्दा है कि क्या जेएस के पास "सही" ओओपी है या हम अन्य भाषाओं की तुलना में कुछ "विधि" को ठीक से कह सकते हैं। मैं वास्तव में निश्चित नहीं हूँ कि यह वर्जन को व्यवहार में लाने के बजाय सीधे मेमोरी में एक ही ऑब्जेक्ट पर लिखने के रूप में व्यवहार करने योग्य होगा, जो असाइनमेंट ऑपरेटर व्यवहार के प्रदर्शन-स्लेइंग ब्रांचिंग के साथ क्लोजर-आधारित भाषा में इसके कॉपी किए गए पॉइंटर को ओवरराइट करने के बजाय। जेएस बनाम अन्य भाषाओं में हम जो कहते हैं उसमें केवल वास्तविक व्यवहार का अंतर होता है जब आप असाइनमेंट ऑपरेटर का उपयोग करते हैं।
एरिक रेपेन

15

इसे इस्तेमाल करो

x = Object.create(x1);

xऔर x1दो अलग-अलग वस्तु xहोगी , परिवर्तन नहीं होगाx1


मैं Object.assign () का उपयोग करके समाप्त होता हूं। सरल परीक्षण के मामले में .create () काम करता है, लेकिन अधिक जटिल के लिए (जो मैं अभी तक पैटर्न नहीं खोज सकता), यह अभी भी उसी पते को संदर्भित करता है।
कोइलॉक्स

यह केवल तभी नहीं बदलेगा जब वस्तु के मूल्यों को संदर्भ द्वारा संग्रहीत नहीं किया जाता है, अर्थात वे संख्या या बूलियन जैसे प्रीमिटिव डेटा प्रकार होते हैं। उदाहरण के लिए, a = {x: [12], y: []} के नीचे दिए गए कोड पर विचार करें; b = Object.create (ए); bxpush (12); console.log (कुल्हाड़ी);
जाजवे डेनिस

8

जावास्क्रिप्ट हमेशा मूल्य से गुजरता है। इस मामले में यह oअनाम फ़ंक्शन में संदर्भ की एक प्रति पारित कर रहा है । कोड संदर्भ की एक प्रति का उपयोग कर रहा है, लेकिन यह एकल ऑब्जेक्ट को बदल रहा है। मूल्य के अलावा किसी अन्य चीज़ से जावास्क्रिप्ट पास बनाने का कोई तरीका नहीं है।

इस मामले में आप जो चाहते हैं वह अंतर्निहित वस्तु की एक प्रति पारित करना है। वस्तु का क्लोन बनाना ही एकमात्र सहारा है। हालांकि आपके क्लोन विधि को थोड़ा अपडेट करने की आवश्यकता है

function ShallowCopy(o) {
  var copy = Object.create(o);
  for (prop in o) {
    if (o.hasOwnProperty(prop)) {
      copy[prop] = o[prop];
    }
  }
  return copy;
}

1
+1 "हमेशा मूल्य से गुजरता है" के लिए, हालांकि मैं ऑब्जेक्ट शेयरिंग द्वारा कॉल का उपयोग करना पसंद करता हूं (जैसा कि "संदर्भ के मूल्य [कॉल द्वारा"] के विपरीत) "और" ऑब्जेक्ट को "स्वयं" मूल्य "को बढ़ावा दें (नोट के साथ) ऑब्जेक्ट को कॉपी / क्लोन / डुप्लिकेट नहीं किया गया है) क्योंकि संदर्भ केवल एक कार्यान्वयन विवरण हैं और जावास्क्रिप्ट के संपर्क में नहीं हैं (या सीधे विनिर्देश में उल्लेख किया गया है!)।

मुझे एक ऑब्जेक्ट के गुणों को जोड़ने में एक समस्या थी जो मैं एक दूरस्थ कनेक्शन से प्राप्त कर रहा हूं (मुझे लगा कि यह समस्या हो सकती है कि मैं उस ऑब्जेक्ट में कोई संपत्ति जोड़ने में सक्षम नहीं हूं) इसलिए मैंने इस उथले कार्य को आज़माया और यह त्रुटि मिली - ऑब्जेक्ट प्रोटोटाइप केवल var copy = Object.create (o) पर ऑब्जेक्ट या नल हो सकता है; किसी भी विचार कैसे मेरी समस्या को हल करने के लिए
हर्षित लड्ढा

क्या यह गहरी नकल नहीं है?
रिवर टैम

@RiverTam नहीं, यह एक गहरी प्रतिलिपि नहीं है, क्योंकि यह वस्तुओं के भीतर वस्तुओं का क्लोन नहीं करता है। हालाँकि, आप इसे आसानी से एक गहरी प्रतिलिपि बना सकते हैं , जिससे यह पुन: आपके द्वारा प्रत्येक उप-ऑब्जेक्ट पर कॉल कर सकता है।
23

7

JQuery उपयोगकर्ताओं के लिए एक विचार के रूप में, फ्रेमवर्क का उपयोग करके सरल तरीके से ऐसा करने का एक तरीका भी है। बस एक और तरीका jQuery हमारे जीवन को थोड़ा आसान बनाता है।

var oShallowCopy = jQuery.extend({}, o);
var oDeepCopy    = jQuery.extend(true, {}, o); 

संदर्भ:


आह - आपने इस पुराने प्रश्न की खोज की :) मुझे लगता है कि मूल प्रश्न जेएस भाषा के अन्वेषण का अधिक था। ऐसा लगता है कि मेरी शब्दावली तब भी कमजोर थी, क्योंकि मेरा उदाहरण क्लोन के बजाय एक गहरी प्रति का था । लेकिन ऐसा लगता है कि वस्तुओं / हैश को केवल संदर्भ द्वारा पारित किया जा सकता है, जो कि स्क्रिप्टिंग भाषाओं में आम है
vol7ron

1
:) यह सटीक कार्यक्षमता की तलाश में आया था। मेरे पास एक डेटा ऑब्जेक्ट था जिसे मुझे मूल ऑब्जेक्ट को जारी रखते हुए सबमिट करने से पहले संपादन के लिए कॉपी करना होगा। मैं मूल जेएस समाधान पसंद करता हूं और इसे अपने बेस लाइब्रेरी में उपयोग करूंगा, लेकिन jQuery समाधान मेरा अस्थायी सुधार है। स्वीकृत उत्तर शानदार है। : डी
ब्रेट वेबर

6

वास्तव में, जावास्क्रिप्ट हमेशा मूल्य से गुजरता है । लेकिन क्योंकि ऑब्जेक्ट संदर्भ मान हैं , ऑब्जेक्ट व्यवहार करेंगे जैसे वे संदर्भ द्वारा पारित किए जाते हैं ।

तो इसके चारों ओर चलने के लिए, वस्तु और पार्स को कठोर करें इसे वापस , दोनों JSON का उपयोग करते हुए। नीचे दिए गए कोड का उदाहरण देखें:

var person = { Name: 'John', Age: '21', Gender: 'Male' };

var holder = JSON.stringify(person);
// value of holder is "{"Name":"John","Age":"21","Gender":"Male"}"
// note that holder is a new string object

var person_copy = JSON.parse(holder);
// value of person_copy is { Name: 'John', Age: '21', Gender: 'Male' };
// person and person_copy now have the same properties and data
// but are referencing two different objects

2
हां, यह साधारण कन्वर्ट / री-कन्वर्ट का विकल्प है। आम तौर पर, स्ट्रिंग्स के साथ काम करना बहुत अक्षम है; हालाँकि, मैंने कुछ समय में JSON पार्सिंग के प्रदर्शन का मूल्यांकन नहीं किया है। ध्यान रखें कि जब यह सरल वस्तुओं के लिए काम करता है, तो जिन वस्तुओं में मान के रूप में कार्य होते हैं, वे सामग्री खो देंगे।
Vol7ron

4

obj2 = {... obj1} का उपयोग करें। अब दोनों वस्तुओं का एक ही मूल्य बस्ट अलग-अलग संदर्भ है


2
यहाँ जावास्क्रिप्ट के लिए नया। स्प्रेड ऑपरेटर संदर्भ द्वारा कॉपी करने के बजाय नया मूल्य बनाता है? तो इसे क्यों ठुकरा दिया गया?
jo3birdtalk 13

2
पहली नज़र में, यह मेरे लिए काम करता है। लेकिन मुझे पता है कि यह केवल चर की पहली परत है। उदाहरण के लिए, यह तब काम करता है let a = {value: "old"} let b = [...a] b.value = "new", जब होगा {value: "old"}, बी होगा {value: "new"}। लेकिन यह बाहर काम नहीं करता है जब let a = [{value: "old"}] let b = [...a] b[0].value = "new", और एक हो जाएगा [{value: "new"}], बी हो जाएगा [{value: "new"}]
ब्रैडी हुआंग

हाँ, यह उथली प्रति है। यदि आपके पास नेस्टेड ऑब्जेक्ट है तो आप गहरी कॉपी करने के लिए नी करते हैं। सरलता के लिए आप क्लोन और डीप क्लोन के कार्यों का उपयोग कर सकते हैं
गीतांशु गुलाटी

3

मुझे किसी वस्तु को मान से कॉपी करने की आवश्यकता है (संदर्भ नहीं) और मुझे यह पृष्ठ उपयोगी लगा:

जावास्क्रिप्ट में किसी ऑब्जेक्ट को गहरी क्लोन करने का सबसे कुशल तरीका क्या है? । विशेष रूप से, जॉन रेजिग द्वारा निम्नलिखित कोड के साथ किसी वस्तु को क्लोन करना:

//Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);

सवाल जावास्क्रिप्ट के बारे में है, न कि jQuery लाइब्रेरी के बारे में।
j08691

1
सच है, जो लोग Jquery का उपयोग नहीं कर सकते हैं जो किसी भी कारण से यह उनकी मदद नहीं करेगा। हालांकि, जैसा कि Jquery एक जावास्क्रिप्ट लाइब्रेरी है, मुझे लगता है कि यह अभी भी अधिकांश जावास्क्रिप्ट उपयोगकर्ताओं की मदद करेगा।
एंथनी हाफ़ेई

यह सर्वर पर इसे करने की कोशिश कर रहे किसी भी प्रोग्रामर की मदद नहीं करेगा। तो - नहीं। यह मान्य उत्तर नहीं है।
टॉमस गॉल्कोव्स्की 12

3

ES6 सिंटैक्स के साथ:

let obj = Object.assign({}, o);


3
बहुत अच्छा उल्लेख @galkowskit। सबसे बड़ा मुद्दा (बेहतर: ध्यान देने योग्य बात ) Object.assignयह है कि यह एक गहरी प्रतिलिपि नहीं करता है।
21

1

जब आप इसे उबालते हैं, तो यह केवल एक फैंसी अति-जटिल प्रॉक्सी है, लेकिन शायद कैच-ऑल प्रोक्सीज़ ऐसा कर सकता है?

var o = {
    a: 'a',
    b: 'b',
    func: function() { return 'func'; }
};

var proxy = Proxy.create(handlerMaker(o), o);

(function(x){
    var obj = x;
    console.log(x.a);
    console.log(x.b);
    obj.foo = 'foo';
    obj.bar = 'bar';
})(proxy);

console.log(o.foo);

function handlerMaker(obj) {
  return {
   getOwnPropertyDescriptor: function(name) {
     var desc = Object.getOwnPropertyDescriptor(obj, name);
     // a trapping proxy's properties must always be configurable
     if (desc !== undefined) { desc.configurable = true; }
     return desc;
   },
   getPropertyDescriptor:  function(name) {
     var desc = Object.getOwnPropertyDescriptor(obj, name); // not in ES5
     // a trapping proxy's properties must always be configurable
     if (desc !== undefined) { desc.configurable = true; }
     return desc;
   },
   getOwnPropertyNames: function() {
     return Object.getOwnPropertyNames(obj);
   },
   getPropertyNames: function() {
     return Object.getPropertyNames(obj);                // not in ES5
   },
   defineProperty: function(name, desc) {

   },
   delete:       function(name) { return delete obj[name]; },   
   fix:          function() {}
  };
}

रिचर्ड, मुझे जवाब देने में थोड़ी देर हो गई :) लेकिन मुझे लगता है कि मैंने कभी कुछ कारणों से ऐसा नहीं किया: मैं सिंटैक्टिक शुगर में देख रहा था जिसने जेएस को विभिन्न तरीकों से वस्तुओं को पारित करने की क्षमता दी; आपका उत्तर लंबा लग रहा था, और मुझे आपके "प्रॉक्सी" के उपयोग पर लटका दिया गया था। 3 साल बाद और मैं अभी भी उपयोग पर लटका हुआ हूं। शायद मैंने कक्षा में पर्याप्त ध्यान नहीं दिया, लेकिन नेटवर्किंग की तरह, मैंने सोचा कि सीएस में परदे के पीछे मध्यस्थ के रूप में काम करना चाहिए। शायद यह यहाँ भी है और मैं इसके बारे में सही ढंग से नहीं सोच रहा हूँ कि यह किस बीच की मध्यस्थता है।
वॉलन्रॉन

0

यदि आप लॉश का उपयोग कर रहे हैं या npm, लॉज़ के मर्ज फ़ंक्शन का उपयोग करके ऑब्जेक्ट के सभी गुणों को एक नए खाली ऑब्जेक्ट की तरह कॉपी करें:

var objectCopy = lodash.merge({}, originalObject);

https://lodash.com/docs#merge

https://www.npmjs.com/package/lodash.merge


एक गहरी प्रतिलिपि में घटनाओं को भी शामिल किया जाना चाहिए, मैं लॉश से बहुत परिचित नहीं हूं, क्या यह एक नई वस्तु के लिए घटनाओं को दर्पण करता है?
Vol7ron
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.