2010-01-19 5 views
13

जावास्क्रिप्ट विरासत कैसे काम करता है, यह समझाते हुए बहुत से लेख और पोस्ट हैं, लेकिन शास्त्रीय विरासत के बजाय प्रोटोटाइप विरासत का उपयोग करके जावास्क्रिप्ट को क्यों लागू किया गया था?प्रोटोटाइप विरासत का उपयोग कर जावास्क्रिप्ट को क्यों लागू किया गया था?

मुझे जावास्क्रिप्ट पसंद है, इसलिए मैं यह बुरी बात नहीं कह रहा हूं ... मैं सिर्फ उत्सुक हूं।

+7

समुदाय विकी के रूप में चिह्नित करें .. –

+0

जावास्क्रिप्ट का निर्माता एक स्टैक ओवरफ्लो उपयोगकर्ता है? –

+1

@ गैबी - वहां कहीं जवाब है। – ChaosPandion

उत्तर

1

मुझे लगता है कि इसे चुना गया था क्योंकि इसे कार्यान्वित करना आसान है, अतिरिक्त कीवर्ड की आवश्यकता नहीं है और उपयोगकर्ताओं को भाषा का उपयोग करने में सक्षम होने के लिए इसे समझने की आवश्यकता नहीं है। यह कक्षा आधारित विरासत से भी अधिक शक्तिशाली और लचीला है।

यह एक untyped भाषा के लिए एक प्राकृतिक पसंद है। कक्षा आधारित विरासत का मुख्य लाभ यह है कि यह स्थैतिक टाइपिंग की अनुमति देता है और इस प्रकार जांच और एक तेज तालिका आधारित लुकअप कार्यान्वयन टाइप करता है।

+0

मुझे "लागू करने में आसान" तर्क के बारे में आश्चर्य है। हालांकि यह ऑब्जेक्ट विरासत के संबंध में सही हो सकता है, लेकिन जब आप मानते हैं कि जावास्क्रिप्ट के प्रथम श्रेणी के फ़ंक्शन वास्तव में शक्तिशाली हैं, और मेरा मानना ​​है कि सभी को लागू करने के लिए इतना सरल नहीं है (आंशिक अनुप्रयोग, बंद, आदि।)। – stakx

12

जब तक जावास्क्रिप्ट के डिजाइनरों में से कोई भी वजन घटाने के लिए बंद नहीं होता है, हम केवल अनुमान लगा सकते हैं। ऐसा कहा जा रहा है, यहां मेरा ले लिया गया है:

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

+4

कक्षाओं का उपयोग करने वाली बहुत सारी स्क्रिप्टिंग भाषाएं हैं। –

+0

इसमें उतना ही पदार्थ है जितना कि यह प्रोटोटाइप है क्योंकि यह प्रोटोटाइप है। ऐसा नहीं है कि आप इसे कह रहे हैं, लेकिन निष्कर्ष गैरकानूनी है। –

+0

@ सेनएमसीमिलन सच है, भाषा * को * इस तरीके से काम करने का मेरा इरादा नहीं था क्योंकि यह एक पटकथा भाषा है, बल्कि यह काफी सुविधाजनक है। –

8

जावास्क्रिप्ट मूल रूप से लिस्प की तरह बहुत अधिक माना जाता था। सिंटैक्स को सी/जावा जैसा अधिक बारीकी से बदलने के बाद भी, यह अभी भी Lisp in C's clothing है। मुझे लगता है कि इसका जवाब इसके कार्यात्मक प्रोग्रामिंग उत्पत्ति में है। शुद्ध एफपी में, कोई परिवर्तनीय स्थिति नहीं है, जिसका अर्थ है कोई उत्परिवर्तनीय वस्तुएं नहीं। यदि आप नियमों को थोड़ा सा आराम करते हैं और थोड़ा रचनात्मक बनते हैं, तो आप प्रोटिप्पल विरासत की तरह कुछ खत्म कर देते हैं, यानी, आप ऑब्जेक्ट्स का विस्तार कर सकते हैं लेकिन मूल ऑब्जेक्ट को संशोधित नहीं कर सकते हैं। यह विरासत के समान शक्ति प्रदान करता है और अभी भी आपको कुछ अपरिवर्तनीयता देता है।

अंत में, सी ++ और जावा, और व्हायोला जैसे दिखने के लिए भाषा को मोड़ो, आपके पास new someFunction() है और शेष इतिहास है।

+1

"क्या कोई म्यूटेबल स्टेटस नहीं है, जिसका अर्थ है कोई म्यूटेबल ऑब्जेक्ट्स" का मतलब क्या है? –

+0

@Andre: ** शुद्ध ** कार्यात्मक प्रोग्रामिंग (उदाहरण के लिए एरलांग की तरह) सभी चर स्थिरांक हैं। वेरिएबल तत्काल होने के बाद उनके द्वारा रखे गए मानों को संशोधित नहीं किया जा सकता है। चूंकि हम चर का उपयोग करके वस्तुओं का संदर्भ देते हैं जिसका अर्थ है कि शुद्ध एफपी में वस्तुओं को संशोधित नहीं किया जा सकता है: सभी वस्तुएं स्थिरांक हैं। – slebetman

+0

ठीक है, लेकिन जावास्क्रिप्ट में, अगर मैं ऐसा करता हूं: var a = {name = "n", आयु = 1}। a.age = 2. मैं क्या कर रहा हूँ? 'ए' को फिर से चालू करना? –

1

प्रोटोटाइपिकल विरासत (बंद होने के साथ) दूसरों को उन चीज़ों को करने की अनुमति देता है जिन्हें कभी कल्पना नहीं की गई थी। यह कई प्रतिमानों का जाल है जो आम उद्देश्य प्रोग्रामिंग प्राप्त करने के लिए एक साथ आए हैं।

प्रोटोटाइप भाषा के साथ, आप अपनी कक्षाओं के लिए "मिश्रण-इन्स" कर सकते हैं। आप भाषा विशिष्ट कीवर्ड के बिना, इच्छित इच्छाओं के स्तर को पूरा कर सकते हैं। संक्षेप में, प्रोटोटाइप भाषाएं भयानक हैं।

मुझे यह कहने से नफरत है, लेकिन जावास्क्रिप्ट, साथ ही कुछ पुस्तकालय, मुझे वह सब कुछ कर सकते हैं जो मुझे चाहिए। यह अपने विकास में उलटा था (जावा के अधीन होना चाहिए)। कार्यान्वयन के सबसे सरल में, इसमें बहुत अधिक शक्ति है।

पर्याप्त अध्ययन/आसपास खेलने के साथ, आप इसकी प्रेरणा के फायदे देखना शुरू कर देंगे। जावास्क्रिप्ट उन कुछ भाषाओं में से एक है जो जानबूझकर संभावित रूप से "छुपा" रखते हैं। यदि आप "क्यों" जानना चाहते हैं तो आपको राजनीति में जाना होगा। लेकिन, इस कारण से, यह कमाल है।

+0

@ महामारी, क्या आप मुझे उन चीज़ों को करने के लिए कुछ संसाधनों के बारे में बता सकते हैं जिन्हें कभी कल्पना नहीं की गई थी "? उदाहरण के लिए मिश्रण-इन्स के साथ, मैं अपने प्रोटोटाइप को सेट करके किसी ऑब्जेक्ट से विधियों को प्राप्त कर सकता हूं, लेकिन मैं केवल एक बार ऐसा कर सकता हूं, है ना? जब तक मैं प्रोटोटाइप की आवश्यकता के बिना कुछ नहीं करता: - मेरे पास एक ऑब्जेक्ट एक्स है, मैं चाहता हूं कि यह वाई .doSomething - X.doSomething = Y.do कुछ - (जो यद्यपि यद्यपि कुछ संदर्भ देता है, दाएं क्या होगा यदि मैं इसे स्वतंत्र रूप से प्राप्त करना चाहता हूं) – ambertch

+0

ठीक है, वर्ग विरासत को अनुकरण करना एक चीज है जो आप कर सकते हैं ... लेकिन, आपको वास्तव में गतिशील रूप से टाइप की गई भाषा में पदानुक्रमों के बारे में चिंता करने की आवश्यकता नहीं है। बस एक नए उदाहरण में अपने प्रोटोटाइप में से एक या अधिक क्लोन करें। जो चीजें आप कर सकते हैं, उनमें शामिल हैं: गतिशील रूप से "कक्षाएं" और उदाहरणों को मिश्रण और अन्य "कक्षाओं" से प्रारंभकर्ताओं द्वारा मिश्रण। "निर्माण" के दौरान इंटरफेस को प्रोग्रामेटिक रूप से बदलना। यहां तक ​​कि आधार "कक्षाएं" बदलना। बेस 64 विधियों को शामिल करने के लिए सभी स्ट्रिंग ऑब्जेक्ट्स को संशोधित करना मुझे कुछ करना है: "foo" .base64()। – pestilence669

+0

प्रोटोटाइप विशेषता जिसका आप उल्लेख कर रहे हैं, कस्टम वर्गों के लिए वैकल्पिक माना जा सकता है। आप नियंत्रण ले सकते हैं और इसे पूरी तरह से बाईपास कर सकते हैं। – pestilence669

5

क्योंकि यह स्वयं से बहुत प्रभावित था। विकिपीडिया और ईसीएमए-स्पेक दोनों का उल्लेख है।

15

यहाँ क्या ब्रेंडन Eich क्या हुआ के बारे में क्या कहना है: http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html

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

ऊपरी इंजीनियरिंग प्रबंधन से दीक्षित यह थी कि भाषा "जावा की तरह दिखनी चाहिए"। इसने योजना के साथ पर्ल, पायथन और टीसीएल से इंकार कर दिया।

मुझे गर्व नहीं है, लेकिन मुझे खुशी है कि मैंने स्कीम-ईश प्रथम श्रेणी के कार्यों और स्व-आश (यद्यपि एकवचन) प्रोटोटाइप को मुख्य सामग्री के रूप में चुना है। जावा प्रभाव, विशेष रूप से y2k दिनांक कीड़े, लेकिन आदिम बनाम ऑब्जेक्ट भेद (उदा।, स्ट्रिंग बनाम स्ट्रिंग) भी दुर्भाग्यपूर्ण थे।

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