2010-05-20 20 views
5

मुझे यह मिला। यह क्या करता है?यह क्या करता है?

function G(a, b) { 
    var c = function() { }; 
    c.prototype = b.prototype; 
    a.T = b.prototype; 
    a.prototype = new c; 
} 
+1

मुझे लगता है कि आप क्या पूछ रहे हैं "कोई ऐसा क्यों करेगा?", क्योंकि "लोगों को भ्रमित करने" के जवाब देने के अलावा, मेरे पास आपके लिए कुछ भी नहीं है। – wlangstroth

+1

आपको यह कहां मिला? सेट किया जा रहा 'टी' प्रॉपर्टी प्रोटोटाइपिकल विरासत के संबंध में मैंने देखा है कि किसी भी पैटर्न के विशिष्ट नहीं है। लेकिन मुझे विश्वास है कि यह कन्स्ट्रक्टर विरासत के साथ-साथ प्रोटोटाइप श्रृंखला भी हो सकता है। –

उत्तर

1

यह क्रॉकफ़ोर्ड की Object.create विधि जैसा दिखता है, लेकिन इस फ़ंक्शन का उपयोग "सेटअप" करने के लिए किया जाता है।

यह दो रचनाकारों को तर्क के रूप में स्वीकार करता है, और यह पहले के prototype को सेट करता है।

मुझे गुप्त चर नाम का नाम बदलने करते हैं:

function G(sub, super) { 
    var F = function() { }; 
    F.prototype = super.prototype; 
    sub.superLink = super.prototype; 
    sub.prototype = new F(); 
} 

function Super() { 
    //... 
} 
Super.prototype.member1 = 'superMember1'; 

function Sub() { 
    this.member2 = 'subMember2'; 
} 

G(Sub, Super); 

new Sub(); // Object { member2="subMember2", member1="superMember1"} 

संपादित करें:T संपत्ति बस को पता है कि उप एक के "सुपर" निर्माता है प्रयोग किया जाता है, मैं पर इस पैटर्न देखा है अन्य स्थानों पर, किताब में प्रो जावास्क्रिप्ट डिजाइन पैटर्न की तरह (page 43), कुछ अतिरिक्त सुविधा के साथ constructor संपत्ति गलत वस्तु को इंगित करने को रोकने के लिए:

function extend(subClass, superClass) { 
    var F = function() {}; 
    F.prototype = superClass.prototype; 
    subClass.prototype = new F(); 
    subClass.prototype.constructor = subClass; 

    subClass.superclass = superClass.prototype; 
    if(superClass.prototype.constructor == Object.prototype.constructor) { 
     superClass.prototype.constructor = superClass; 
    } 
} 

यह भी देखें:

+1

मुझे यह आसान नहीं लगता है, 'टी' संपत्ति का उपयोग किसी भी तरह से प्रश्न से स्पष्ट नहीं किया जाता है। साथ ही, आपके उत्तर का नतीजा केवल 'Sub.prototype = Super.prototype' –

+1

@Sean बिल्कुल सेट करके ही पहुंचा जा सकता है। ऐसा करके, यदि आप 'सब.प्रोटोटाइप' में कोई सदस्य जोड़ते हैं तो आप 'सुपर.प्रोटोटाइप' में एक सदस्य भी जोड़ देंगे। –

+0

@ सीएमएस मुझे लगता है कि यह ध्यान देने योग्य है कि 'सदस्य 2' 'नए उप()' की प्रोटोटाइप श्रृंखला पर होगा और न कि नए उप() 'पर। –

0

ऐसा लगता है कि यह आप के एक समारोह में पारित उसमें परिवर्तन कर, और फिर इसे वापस पारित करने के लिए की क्षमता देता है - a.prototype एक नया instantiated है इसकी प्रति "प्राप्त करने" और "सेटिंग" के लिए इस प्रकार के कोड का उपयोग कर नेट पर उदाहरण हैं।

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