वर्तमान में मैं एक परियोजना जहाँ हम ऑब्जेक्ट ओरिएंटेड जावास्क्रिप्ट लिख रहे हैं में काम कर रहा हूँ।का उपयोग प्रोटोटाइप जावास्क्रिप्ट - सबसे अच्छा अभ्यास
1: इस परियोजना में मैं एक वर्ग को परिभाषित करने के दो अलग अलग तरीकों को देखा है प्रोटोटाइप
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype = {
myFunction1: function() {
return this.member1 + " " + this.member2;
},
myFunction2: function(param1) {
this.member3 = paraml;
}
};
2 पर एक बार में काम करता है घोषित: प्रोटोटाइप
My.Namespace.ClassName = function(param1, param2) {
this.member1 = param1;
this.member2 = param2;
};
My.Namespace.ClassName.prototype.myFunction1 = function() {
return this.member1 + " " + this.member2;
};
My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
this.member3 = paraml;
};
पर प्रत्येक कार्य अलग-अलग तैयार करें क्या जावास्क्रिप्ट दो दिए गए उदाहरणों के आधार पर व्यवहार करता है या यह केवल एक शैली अंतर है?
व्यक्तिगत तौर पर मैं किसी भी व्यवहार अंतर नहीं देखा है, लेकिन मैं लग रहा है कि वहाँ एक सूक्ष्म अंतर जो मैं वर्तमान में याद आ रही है होना चाहिए है।
इसके अलावा। मैं जानना चाहता हूं कि यह एक आम प्रथा है या कक्षाओं को परिभाषित करने के लिए बेहतर तरीके हैं।
तुम क्या आप _In साथ पहली विधि मतलब और अधिक विस्तार से व्याख्या कर सकते हैं, जब आप प्रोटोटाइप को ओवरराइट करते हैं, वहां एक ऐसी संपत्ति थी जो अब खो गई है। क्या आपका मतलब है कि 'var.Namespace.ClassName.constructor' में' var obj = new My.Namespace.ClassName ("value1", "value2") को कॉल करने से पहले और बाद में कोई अंतर है? – hwcverwe
नहीं - 'My.Namespace.ClassName.prototype' 'कन्स्ट्रक्टर' संपत्ति के साथ आता है। जब आप प्रोटोटाइप को ओवरराइट करते हैं, तो कन्स्ट्रक्टर खो जाता है। – Scimonster
स्वीकृत लेकिन एक प्रश्न हालांकि: क्या मैं दोनों शैलियों को जोड़ सकता हूं या इससे कहीं समस्याएं पैदा हो सकती हैं? – hwcverwe