2012-09-27 26 views
6

जावास्क्रिप्ट में, प्रत्येक फ़ंक्शन की प्रोटोटाइप ऑब्जेक्ट में एक गैर-गणना योग्य गुण constructor है जो फ़ंक्शन को इंगित करता है (EcmaScript §13.2)। यह किसी भी देशी कार्यक्षमता (उदाहरण के लिए केवल instanceof चेकों प्रोटोटाइप श्रृंखला) में प्रयोग किया जाता है नहीं, लेकिन हम जब विरासत के लिए एक समारोह का prototype संपत्ति को अधिलेखित are encouraged to adjust it:'कन्स्ट्रक्टर' संपत्ति वास्तव में किस लिए उपयोग की जाती है?

SubClass.prototype = Object.create(SuperClass.prototype, { 
    constructor: {value:SubClass, writable:true, configurable:true} 
}); 

लेकिन, हम (मेरे सहित) कर ऐसा ही स्पष्टता और स्वच्छता के लिए? क्या कोई असली दुनिया उपयोग के मामले हैं जो constructor property पर भरोसा करते हैं?

+0

क्या मेरी समझ रचनाकार संपत्ति का उपयोग यह देखने के लिए किया जाता है कि कोई विशेष वस्तु बनाई गई है या किस कार्यात्मक कन्स्ट्रक्टर द्वारा बनाई गई है। – Apurv

+0

संबंधित: [क्या जावास्क्रिप्ट में कन्स्ट्रक्टर प्रॉपर्टी के लिए कोई अच्छा उपयोग केस है?] (Http://stackoverflow.com/questions/8073867/is-there-a-good-use-case-for-the-constructor-property -इन-जावास्क्रिप्ट), हालांकि उत्तर उपयोगी नहीं हैं – Bergi

+0

यह भी देखें: [प्रोटोटाइप कन्स्ट्रक्टर सेट करना क्यों आवश्यक है?] (http://stackoverflow.com/q/8453887/1048572) – Bergi

उत्तर

2

मैं वास्तव में नहीं देख सकते हैं क्यों constructor संपत्ति क्या यह जे एस में है:

यह उसी के लिए एक महान उदाहरण है। मैं कभी कभी इसे प्रयोग (इवेंट वस्तु की तरह) आईई < में वस्तुओं के प्रोटोटाइप को पाने के लिए अपने आप को लगता है 9. हालांकि मैं इसे कुछ ppl शास्त्रीय OO प्रोग्रामिंग निर्माणों की नकल करने की अनुमति देने के लिए नहीं है लगता है:

function Foo() 
{ 
    this.name = 'Foo'; 
} 
function Bar() 
{ 
    this.name = 'Bar'; 
} 
function Foobar(){}; 
Foo.prototype = new Foobar; 
Foo.prototype.constructor = Foo; 
Bar.prototype = new Foobar; 
Bar.prototype.constructor = Bar; 
var foo = new Foo(); 
var bar = new Bar(); 
//so far the set-up 
function pseudoOverload(obj) 
{ 
    if (!(obj instanceof Foobar)) 
    { 
     throw new Error 'I only take subclasses of Foobar'; 
    } 
    if (obj.constructor.name === 'Foo') 
    { 
     return new obj.constructor;//reference to constructor is quite handy 
    } 
    //do stuff with Bar instance 
} 

तो AFAIK , "फायदे" निर्माता संपत्ति के हैं:

  • नई वस्तुओं उदाहरण से आसानी से एक Certa की उपवर्गों होने के रूप में अपने वस्तुओं instantiating
  • सक्षम किया जा रहा समूह के लिए कक्षा में, लेकिन फिर भी यह जांचने में सक्षम है कि आप किस प्रकार के उप-वर्ग से निपट रहे हैं।
  • जैसा कि आप कहते हैं: साफ होना।
0

क्या मेरी समझ कन्स्ट्रक्टर संपत्ति का उपयोग यह देखने के लिए किया जाता है कि कोई विशेष ऑब्जेक्ट बनाया गया है या किस कार्यात्मक कन्स्ट्रक्टर द्वारा बनाया गया है। http://www.klauskomenda.com/code/javascript-inheritance-by-example/

+0

वह आलेख उपयोग नहीं करता है 'कन्स्ट्रक्टर' संपत्ति बिल्कुल। आप http://joost.zeekat.nl/constructors-considered-mildly-confusing.html को पढ़ने के लिए जो मैं पूछ रहा हूं उसे समझना चाहूंगा :-) – Bergi

+0

क्षमा करें मेरा मतलब प्रोटोटाइप..मेरा बुरा :) – Apurv