2010-06-01 12 views
7

निम्नलिखित "कुरूपता" क्या हल करती है? ऐसा कुछ है जो मुझे नहीं मिल रहा है, और मैं समझने में मदद करता हूं कि यह क्या है।से उदाहरण: "जावास्क्रिप्ट - द गुड पार्ट्स"


उदाहरण के लिए, Function.prototype बढ़ाने के द्वारा, हम एक विधि उपलब्ध सभी कार्यों के लिए कर सकते हैं:

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

एक विधि विधि के साथ Function.prototype बढ़ाने के द्वारा, हम अब और नहीं लिखने की आवश्यकता प्रोटोटाइप संपत्ति का नाम। कुटिलता का वह हिस्सा अब छुपाया जा सकता है।

उत्तर

15

अच्छा, कुरूपता व्यक्तिपरक है, लेकिन देखते हैं।

आप आम तौर पर लिखें:

function Foo() {} 
Foo.prototype.method1 = function() { /*...*/ }; 
Foo.prototype.method2 = function() { /*...*/ }; 

आप गुण है कि आप नए ऑपरेटर द्वारा बनाई उदाहरणों को विरासत में मिला होना चाहते हैं के साथ prototype वस्तु एक constructor function का विस्तार।

var obj = new Foo(); आप Foo निर्माता का एक उदाहरण बना रहे हैं के साथ उदाहरण के लिए, उस वस्तु सभी गुण Foo.prototype वस्तु और अन्य वस्तुओं prototype chain में उच्च करने के लिए बाध्य प्राप्त कर लेगा।

Crockford की विधि एक ही है, उस विधि Function.prototype वस्तु में परिभाषित किया गया है करता है, सभी कार्यों उस वस्तु से विरासत है, तो आप इस तरह विधि कॉल कर सकते हैं:

function Foo() {} 
Foo.method('method1', function() { /*...*/ }); 
Foo.method('method2', function() { /*...*/ }); 

यह मूल रूप से सिर्फ खाल कोड है, जो Crockford समझता है बदसूरत से prototype शब्द ...

"जावास्क्रिप्ट अच्छा पार्ट्स" एक बहुत अच्छी किताब है, लेकिन मैं व्यक्तिगत दृष्टिकोण पर आधारित है लगता है कि डगलस Crockfor डी भाषा का है।

मैं बहुत कुछ के साथ उसके साथ सहमत हूँ, लेकिन मैं यह भी कुछ पहलुओं से असहमत हैं ...

+1

शब्द "प्रोटोटाइप" का उपयोग करना अधिक स्पष्ट और स्पष्ट जब कोड को पढ़ने लगता है। उत्तर के लिए धन्यवाद :) – Matrym

+2

मैं सहमत हूं। इस मामले में क्रॉकफोर्ड गलत पेड़ को भड़क रहा है। – bobince

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