2015-03-08 7 views
7

में वस्तुओं का विस्तार करने के मुझे पता है कि वस्तुओं का विस्तारसर्वश्रेष्ठ अभ्यास Underscore.js

_.extend(parent, child); 

विधि के माध्यम से किया जाता है।

मैं वेब जहां लोगों को Underscore.js

_.extend({}, this, child); 

क्यों वे ऐसा करते हैं में एक विशेष तरीके से वस्तुओं का विस्तार कर रहे हैं में अलग-अलग स्थानों को देखा है?

उत्तर

20

अंडरस्कोर documentation के अनुसार, _.extend विधि के एपीआई

_.extend(destination, *sources) 
है

पहला नमूना

_.extend(parent, child); 

इस नमूना कोड में, आप वास्तव में बाल वस्तु से मूल वस्तु तक गुणों का विस्तार कर रहे हैं। यहां मूल वस्तु संशोधित की गई है।

दूसरा नमूना

_.extend({}, parent, child); 

मामले में आप पैरेंट ऑब्जेक्ट को संशोधित नहीं करना चाहते, और अभी भी चाहते हैं माता पिता और बच्चे से दोनों गुण। आप इसका इस्तेमाल कर सकते हैं। यहां आप पैरेंट ऑब्जेक्ट और बच्चे ऑब्जेक्ट को एक नई ऑब्जेक्ट में विस्तारित कर रहे हैं।

+0

इसलिए यदि मैं अलग-अलग बच्चों के साथ पहली बार कई बार उपयोग करता हूं, तो मेरे माता-पिता के पास उन अलग-अलग बच्चों की सभी कार्यक्षमता होगी। सही? दूसरे दृष्टिकोण के साथ वही बात मुझे पूरी तरह से अलग वस्तुओं देता है। – JustBasti

+0

आपको कई बार कॉल नहीं करना है, आपके पास तर्कों का एन हो सकता है। यू _.extend (माता-पिता, child1, child2, chilld3, child4) जैसी कुछ कर सकता है; तो माता-पिता के पास बच्चे के सभी गुण होंगे 1,3,3 और 4 –

2

अंडरस्कोर की विस्तृत विधि इसे पारित पहले तर्क को ओवरराइट करता है। लेकिन ज्यादातर बार आप इसे नहीं चाहते हैं। आप बस एक और वस्तु चाहते हैं जहां दूसरा पहले की विधि के साथ बढ़ाया गया हो।

तो आप परिणाम के लिए कंटेनर ऑब्जेक्ट के रूप में एक खाली ऑब्जेक्ट पास करते हैं।

var grandChild = _.extend({}, parent, child);

5

इस उदाहरण लें:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

_.extend(myConfig, yourConfig); 

अब, myConfig clobbered है। मैंने myConfig.name के मूल मान को अधिलेखित कर दिया है, और मैं इसे कभी वापस नहीं प्राप्त कर सकता हूं।

क्रम बनाए रखने के myConfig और yourConfig, मैं एक 3 वस्तु में दोनों गठबंधन करने के लिए की जरूरत में:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

sharedConfig = _.extend({}, myConfig, yourConfig); 
संबंधित मुद्दे