2012-02-13 4 views
5

मैं अंडरस्कोर के extend फ़ंक्शन का उपयोग करने और एक विशिष्ट केस को लागू करने में सक्षम होना चाहता हूं। डिफ़ॉल्ट रूप से, extend स्रोत के साथ गंतव्य के किसी भी मौजूदा सदस्य को ओवरराइड करता है। - अलग करने और reattaching द्वाराअंडरस्कोर के _.extend (...) का उपयोग गंतव्य के कुछ सदस्यों को ओवरराइड किए बिना

addComponent: function(comp, init) { 
    var iF; 
    if (comp.initialize) { 
     iF = comp.initialize; 
     delete comp["initialize"]; 
    } 

    _.extend(this,comp); 

    if (iF) { 
     comp.initialize = iF; 
     comp.initialize.call(this,init); 
    } 

    return this; 
} 

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

उत्तर

16

बस एक त्वरित विचार स्पॉट करो, _.extend कई स्रोतों को स्वीकार कर सकते हैं:

_.extend(this, comp, { initialize:this.initialize }); 
+0

ओह .. यह एक अच्छा – preslavrachev

17

मैं पार्टी के लिए वास्तव में देर से कर रहा हूँ, लेकिन _.defaults आप क्या देख रहे थे है।

+0

_.defaults केवल एक स्तर के लिए कर सकता है। अगर कुछ ऐसा है: {ए: {बी: "एक्सवाईजेड"}} और {ए: {सी: "टीटीटी"}} तो यह काम नहीं करेगा। क्या कोई बहु-स्तर डिफ़ॉल्ट है? – murvinlai

+1

@murvinlai हां, $ .extend। – pilau

संबंधित मुद्दे