मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरे जावास्क्रिप्ट कक्षाओं (या सिंगलटन ऑब्जेक्ट्स) को सही तरीके से कैसे बनाया जाए।
उन लोगों ("कक्षाओं" और सिंगलटन ऑब्जेक्ट्स) के बीच एक बड़ा अंतर है। आपके पहले उदाहरण उदाहरण एक-ऑफ ऑब्जेक्ट्स (सिंगलेट्स) हैं। आपका तीसरा (अंतिम) उदाहरण कन्स्ट्रक्टर फ़ंक्शन बनाता है जो आपको एक ही प्रोटोटाइप साझा करने वाली एकाधिक ऑब्जेक्ट्स बनाने की अनुमति देगा। मैं बढ़ाने निर्माता समारोह पर prototype
संपत्ति बजाय यह जगह के रूप में आप कर रहे हैं, की सिफारिश करेंगे जैसे:
var Thingy = function() { // Or use a function declaration rather than expression
// Optional initialization code here
};
Thingy.prototype.foo = 'bar';
Thingy.prototype.method = function() {
// Method code here
};
(। निर्माता काम करता है, प्रथा के अनुसार, एक अपर केस अक्षर से शुरू)
जो आप उपयोग करते हैं (सिंगलटन या कन्स्ट्रक्टर फ़ंक्शन) आपको जो चाहिए उसे निर्भर करता है।
ES2015 (उर्फ "ES6") के रूप में, यह आसान है, हालांकि गैर-विधि प्रोटोटाइप संपत्ति (आपके foo
) को परिभाषित करने के लिए कोई नया वाक्यविन्यास नहीं है; वहाँ शायद ES2017 या ES2018 में हो जाएगा, एक बार this proposal चाल आगे है, लेकिन तब तक:
class Thingy {
constructor() {
// Optional initialization code here
}
method() {
// Method code here
}
}
Thingy.prototype.foo = 'bar';
आप विरासत पदानुक्रम में प्राप्त करने की आवश्यकता, पुराने ES5 वाक्य रचना में पाइपलाइन का एक उचित बिट शामिल होती है, तो:
var Base = function() {
};
Base.prototype.method = function(arg1) {
// ...
};
var Derived = function() {
Base.call(this);
};
Derived.prototype = Object.create(Base.prototype);
Derived.prototype.constructor = Derived;
Derived.prototype.method = function(arg1) {
// Using Base's `method`, if desired, is a bit ugly:
Base.prototype.method.call(this, arg1);
};
... है यही वजह है कि आप पुस्तकालयों में कदम रख, प्रोटोटाइप के Class
सामान, या अपने खुद के Lineage की तरह देखने के लिए इस्तेमाल किया; उन हालांकि, ES2015 वाक्य रचना से पुराने हो गए हैं, whcih यह पूरी तरह आसान बनाता है:
class Base {
method(arg1) {
// ...
}
}
class Derived extends Base {
method(arg1) {
// Use's the superclass's `method`, if desired, is easy:
super.method(arg1);
}
}
पुन शीर्षक आपके प्रश्न के:
सही तरीका एक जावास्क्रिप्ट वर्ग बनाने के लिए क्या है?
, कई समान रूप से सही तरीके जावास्क्रिप्ट में वस्तुओं की "वर्गों" बनाने के लिए कर रहे हैं क्योंकि जावास्क्रिप्ट एक बहुत लचीला भाषा है। मानक कन्स्ट्रक्टर फ़ंक्शंस, "बिल्डर" फ़ंक्शन, Object.create
(ES5- सक्षम वातावरण पर) हैं जो आपको अधिक प्रत्यक्ष प्रोटोटाइपल विरासत और कई अन्य लोगों को करने देता है। जावास्क्रिप्ट के बारे में महान चीजों में से एक यह है कि आप अपनी "कक्षा" की शैली चुनने के लिए मिलता है।
नियम # 1: कभी भी 'नया ऑब्जेक्ट() 'का उपयोग न करें। – Ryan
@minitech, आपको यकीन है? उन्होंने इसे किसी कारण से बनाया होगा। – Xeoncross
@ एक्सोनक्रॉस: ऐसा नहीं है कि मुझे पता है। :-) –