दिलचस्प पोस्ट
गतिशील रूप से एंड्रॉइड में दृश्य जोड़ें और निकालें? MySQL का प्रयोग करके तीन तालिकाओं में शामिल हो रहा है वसंत सुरक्षा के सुरक्षाकॉन्टेक्सहोल्डर: सत्र या अनुरोध बाध्य? कैसे निर्भरता इंजेक्शन निर्माता पागलपन से बचने के लिए? रियल बनाम फ़्लोटिंग पॉइंट बनाम मनी VBA कोड का उपयोग Excel 2003 में छवि के रूप में एक्सेल कार्यपत्रकों को कैसे निर्यात करें? प्रत्येक दस्तावेज़ में अतिरिक्त फ़ील्ड के साथ एक प्रतिक्रियाशील प्रकाशन बनाएं विशिष्ट फ़ोल्डर में आप एक गीट भंडार कैसे क्लोन करते हैं? सी / सी + + जांच अगर एक बिट सेट है, अर्थात चर चर ऑरेंज प्रॉपर्टी का उपयोग चर का उपयोग कैसे करें जावास्क्रिप्ट का उपयोग कर कस्टम HTTP शीर्षलेख जोड़ना एकाधिक इंडेक्स बनाम मल्टी-कॉलम इंडेक्स क्या मेयर्स का सिंगलटन पैटर्न थ्रेड सुरक्षित है? इंटरॉप प्रकार एम्बेड नहीं किया जा सकता मैं इकाई ढांचे में डाली गई इकाई का आईडी कैसे प्राप्त करूं?

क्या मुझे ऑब्जेक्ट literals या constructor functions का उपयोग करना चाहिए?

मुझे भ्रमित हो रहा है कि मुझे जावास्क्रिप्ट में कोई ऑब्जेक्ट बनाना चाहिए। ऐसा लगता है कि कम से कम दो तरीके हैं एक वस्तु आंशिक संकेतन का उपयोग करना है, जबकि अन्य का निर्माण कार्यों का उपयोग करता है। क्या दूसरे के ऊपर एक का फायदा है?

वेब के समाधान से एकत्रित समाधान "क्या मुझे ऑब्जेक्ट literals या constructor functions का उपयोग करना चाहिए?"

यदि आपके पास किसी ऑब्जेक्ट से संबंधित व्यवहार नहीं है (यानी ऑब्जेक्ट केवल डेटा / स्टेट के लिए एक कंटेनर है), तो मैं एक ऑब्जेक्ट का उपयोग शाब्दिक होगा

var data = { foo: 42, bar: 43 }; 

किस सिद्धांत लागू करें यदि आपको डेटा के एक सरल कंटेनर से परे कुछ भी ज़रूरत नहीं है, तो एक साधारण शब्द के साथ जाओ

यदि आप अपने ऑब्जेक्ट में व्यवहार जोड़ना चाहते हैं, तो आप किसी निर्माता के साथ जा सकते हैं और निर्माण के दौरान ऑब्जेक्ट के तरीकों को जोड़ सकते हैं या अपनी कक्षा को एक प्रोटोटाइप दे सकते हैं।

 function MyData(foo, bar) { this.foo = foo; this.bar = bar; this.verify = function () { return this.foo === this.bar; }; } // or: MyData.prototype.verify = function () { return this.foo === this.bar; }; 

इस तरह की एक श्रेणी आपके डेटा ऑब्जेक्ट के लिए स्कीमा की तरह काम करती है: अब आपके पास कुछ प्रकार का अनुबंध है (कन्स्ट्रक्टर के माध्यम से) जो वस्तुएं आरंभ / समाहित करती हैं एक मुफ्त शाब्दिक डेटा का केवल एक अनाकार बूँद है।

आपको एक बाहरी verify फ़ंक्शन भी हो सकता है जो एक सादे पुराने डेटा ऑब्जेक्ट पर कार्य करता है:

 var data = { foo: 42, bar: 43 }; function verify(data) { return data.foo === data.bar; } 

हालांकि, यह इनकैप्सुलेशन के संबंध में अनुकूल नहीं है: आदर्श रूप से, सभी डेटा + इकाई के साथ जुड़े व्यवहार एक साथ रहना चाहिए।

यह अनिवार्य रूप से नीचे उगलती है यदि आपको अपने ऑब्जेक्ट के कई उदाहरणों की आवश्यकता होती है या नहीं; एक निर्माता के साथ परिभाषित ऑब्जेक्ट आपको उस ऑब्जेक्ट के कई उदाहरण देता है। ऑब्जेक्ट लिटरल मूल रूप से वेलेबल्स / तरीके जो कि सभी सार्वजनिक हैं, के साथ सिंगलटन हैं

 // define the objects: var objLit = { x: 0, y: 0, z: 0, add: function () { return this.x + this.y + this.z; } }; var ObjCon = function(_x, _y, _z) { var x = _x; // private var y = _y; // private this.z = _z; // public this.add = function () { return x + y + this.z; // note x, y doesn't need this. }; }; // use the objects: objLit.x = 3; objLit.y = 2; objLit.z = 1; console.log(objLit.add()); var objConIntance = new ObjCon(5,4,3); // instantiate an objCon console.log(objConIntance.add()); console.log((new ObjCon(7,8,9)).add()); // another instance of objCon console.log(objConIntance.add()); // same result, not affected by previous line 

एक समान तरीके से वस्तुओं को बनाने का एक अन्य तरीका एक फ़ंक्शन का उपयोग करना है जो ऑब्जेक्ट देता है:

 function makeObject() { var that = { thisIsPublic: "a public variable" thisIsAlsoPublic: function () { alert(that.thisIsPublic); } }; var secret = "this is a private variable" function secretFunction() { // private method secret += "!"; // can manipulate private variables that.thisIsPublic = "foo"; } that.publicMethod = function () { secret += "?"; // this method can also mess with private variables } that.anotherPublicVariable = "baz"; return that; // this is the object we've constructed } makeObject.static = "This can be used to add a static varaible/method"; var bar = makeObject(); bar.publicMethod(); // ok alert(bar.thisIsPublic); // ok bar.secretFunction(); // error! bar.secret // error! 

चूंकि जावास्क्रिप्ट में फ़ंक्शंस बंद हैं, इसलिए हम निजी चर और विधियों का उपयोग कर सकते हैं और new से बच new

जावास्क्रिप्ट में निजी चर पर http://javascript.crockford.com/private.html पर

यह आप पर निर्भर करता है की आप क्या करना चाहते हो। यदि आप (अर्द्ध) निजी चर या आपके कार्यों में उपयोग करना चाहते हैं, तो एक कन्स्ट्रक्टर फ़ंक्शन ऐसा करने का तरीका है। यदि आपके ऑब्जेक्ट में केवल गुण और विधियां हैं, तो एक वस्तु सचमुच ठीक है।

 function SomeConstructor(){ var x = 5; this.multiply5 = function(i){ return x*i; } } var myObj = new SomeConstructor; var SomeLiteral = { multiply5: function(i){ return i*5; } } 

अब myObj और कुछ SomeLiteral में myObj विधि बिल्कुल एक ही काम करते हैं। फर्क सिर्फ इतना है कि MyObj एक निजी चर का उपयोग करता है उत्तरार्द्ध कुछ मामलों में उपयोगी हो सकता है अधिकांश समय एक वस्तु का शाब्दिक पर्याप्त होता है और जेएस-ऑब्जेक्ट बनाने का एक अच्छा और साफ तरीका है।

नीचे दिया गया एक ऑब्जेक्ट, ऑब्जेक्ट लिटल वाक्यविन्यास, एक फ़ंक्शन कन्स्ट्रक्टर और ऑब्जेक्ट बनाने के तीन तरीके Object.create() । ऑब्जेक्ट शाब्दिक सिंटैक्स केवल मक्खी पर बनाता है और ऑब्जेक्ट बनाता है और जैसे कि इसका __prototype__ Object ऑब्जेक्ट है और इसमें ऑब्जेक्ट के सभी गुणों और तरीकों तक पहुंच होगी। सख्ती से एक डिजाइन पैटर्न से परिप्रेक्ष्य एक साधारण ऑब्जेक्ट का उपयोग करने के लिए इस्तेमाल किया जाना चाहिए डेटा का एक उदाहरण का संग्रह।

फ़ंक्शन कन्स्ट्रक्टर का नाम विशेष गुण है .prototype फ़ंक्शन कन्स्ट्रक्टर द्वारा बनाए गए किसी भी ऑब्जेक्ट के __prototype__ यह प्रॉपर्टी बन जाएगी। फ़ंक्शन कन्स्ट्रक्टर की .prototype संपत्ति में जोड़े जाने वाले सभी गुण और विधियां सभी ऑब्जेक्ट्स के लिए उपलब्ध होंगी। एक कंस्ट्रक्टर का इस्तेमाल किया जाना चाहिए यदि आपको डेटा के कई उदाहरणों की आवश्यकता होती है या आपके ऑब्जेक्ट से व्यवहार की आवश्यकता होती है। ध्यान दें फ़ंक्शन कन्स्ट्रक्टर भी सबसे अच्छा उपयोग होता है जब आप निजी / सार्वजनिक विकास पैटर्न को अनुकरण करना चाहते हैं। सभी साझा विधियों को .prototype पर रखने के लिए याद रखें, ताकि वे प्रत्येक ऑब्जेक्ट .prototype में बनाए न हों।

ऑब्जेक्ट के साथ ऑब्जेक्ट Object.create() इस विधि द्वारा बनाए गए ऑब्जेक्ट्स के लिए __prototype__ रूप में एक ऑब्जेक्ट को शाब्दिक इस्तेमाल करता है। सभी गुणों और विधियों को ऑब्जेक्ट में जोड़ा जाएगा, उन सभी वस्तुओं को वास्तविक प्रोटोटाइप विरासत के माध्यम से उपलब्ध होगा। यह मेरा पसंदीदा तरीका है

 //Object Example //Simple Object Literal var mySimpleObj = { prop1 : "value", prop2 : "value" } // Function Constructor function PersonObjConstr() { var privateProp = "this is private"; this.firstname = "John"; this.lastname = "Doe"; } PersonObjConstr.prototype.greetFullName = function() { return "PersonObjConstr says: Hello " + this.firstname + " " + this.lastname; }; // Object Literal var personObjLit = { firstname : "John", lastname: "Doe", greetFullName : function() { return "personObjLit says: Hello " + this.firstname + ", " + this.lastname; } } var newVar = mySimpleObj.prop1; var newName = new PersonObjConstr(); var newName2 = Object.create(personObjLit); 

आधिकारिक वस्तु के साथ जाओ, यह अधिक सलाह है और शुरुआती मूल्यों की शुरूआत के साथ बेहतर फैलता है।

// ऑब्जेक्ट आधिकारिक और ऑब्जेक्ट कन्स्ट्रक्टर

 function MyData(foo, bar) { this.foo = foo; this.bar = bar; } MyData.prototype.verify = function () { return this.foo === this.bar; }; //add property using prototype var MD = new MyData;//true. var MD = new MyData();//true. MD.verify// return only the function structure. MD.verify(); //return the verify value and in this case return true coz both value is null. var MD1 = new MyData(1,2); // intialized the value at the starting. MD1.verify// return only the function structure. MD1.verify(); // return false coz both value are not same. MD1.verify(3,3);// return false coz this will not check this value intialized at the top MyData.prototype.verify = function (foo,bar) { return this.foo === this.bar; }; var MD1 = new MyData(1,2); MD1.verify(); MD1.verify(3,3);// return false coz this keyword used with foo and bar that will check parent data 

यहां छवि विवरण दर्ज करें

क्या आप पृष्ठ के लिए ऑब्जेक्ट का एकल उदाहरण चाहते हैं – शाब्दिक

क्या आप बस डीटीओ ऑब्जेक्ट्स जैसे डेटा ट्रांसफर करना चाहते हैं, एसईटी प्राप्त करें: – लिटरल

क्या आप विधि व्यवहारों के साथ वास्तविक वस्तुओं बनाना चाहते हैं, कई उदाहरण – कन्स्ट्रक्टर फ़ंक्शन, ओओपी सिद्धांतों का पालन करें, उत्तराधिकार: – कन्स्ट्रक्टर फ़ंक्शन

नीचे यूट्यूब वीडियो है जो बताता है कि क्या सचमुच में विस्तार है, कन्स्ट्रक्टर कार्य क्या हैं और वे एक-दूसरे से कैसे भिन्न हैं

https://www.youtube.com/watch?v=dVoAq2D3n44

जैसा कि https://www.w3schools.com/js/js_object_definition.asp में उल्लिखित है

एक वस्तु का प्रयोग करना, आप एक बयान में एक ऑब्जेक्ट को परिभाषित और बनाते हैं

भी

ऑब्जेक्ट शब्दशः केवल एक ऑब्जेक्ट बनाएँ कभी-कभी हम एक ऑब्जेक्ट प्रकार की तरह लगते हैं जिसे एक प्रकार के कई ऑब्जेक्ट बनाने के लिए इस्तेमाल किया जा सकता है।