ऑब्जेक्ट-ओरिएंटेड जावास्क्रिप्ट (OOJS) ऑब्जेक्ट इंस्टेंस बनाने के 3 तरीके
जब एक प्रोग्रामिंग भाषा होती है सभी वस्तुओं के बारे में, पहली चीज जो हमें सीखने की जरूरत है वह है वस्तुओं का निर्माण कैसे करें. जावास्क्रिप्ट में ऑब्जेक्ट बनाना काफी आसान है: घुंघराले ब्रेसिज़ की एक जोड़ी हालांकि, वह काम करेगा एक ही रास्ता नहीं है एक वस्तु बनाने के लिए न ही एकमात्र तरीका आपको कभी भी उपयोग करने की आवश्यकता होगी.
जावास्क्रिप्ट में, वस्तु उदाहरण हैं निर्मित वस्तुओं से और जब कार्यक्रम चल रहा हो तो अस्तित्व में आएं। उदाहरण के लिए, दिनांक
एक अंतर्निहित वस्तु है जो हमें तारीखों के बारे में जानकारी देती है। यदि हम किसी पृष्ठ पर वर्तमान तिथि दिखाना चाहते हैं, तो हम एक रनटाइम उदाहरण की जरूरत है दिनांक
जो वर्तमान तिथि के बारे में जानकारी देता है.
जावास्क्रिप्ट भी हमें अनुमति देता है हमारी अपनी वस्तुओं को परिभाषित करें कि रनटाइम में अपनी वस्तु उदाहरण उत्पन्न कर सकते हैं। जावास्क्रिप्ट में, सब कुछ एक वस्तु है और हर वस्तु एक है परम पूर्वज बुलाया वस्तु
. ऑब्जेक्ट इंस्टेंस का निर्माण कहा जाता है इन्स्टेन्शियशन.
1. द नया
ऑपरेटर
एक नई वस्तु उदाहरण बनाने के लिए सबसे आम और प्रसिद्ध तरीकों में से एक है का उपयोग करते हुए नया
ऑपरेटर.
आपको ज़रूरत है एक निर्माता बनाने के लिए नया
ऑपरेटर का काम। एक निर्माता एक वस्तु का एक तरीका है जो एक साथ रखता है a उस वस्तु का नया उदाहरण. इसका मूल वाक्य इस तरह दिखता है:
नया निर्माणकर्ता ()
एक कंस्ट्रक्टर कर सकता है तर्क स्वीकार करें इसका उपयोग उस ऑब्जेक्ट के गुण को बदलने या जोड़ने के लिए किया जा सकता है जो इसका निर्माण करता है। कंस्ट्रक्टर एक ही नाम है वस्तु के रूप में यह है.
यहाँ एक उदाहरण है कि कैसे बनाएँ का उदाहरण है दिनांक()
वस्तु उसके साथ नया
कीवर्ड:
dt = new Date (2017, 0, 1) कंसोल.लॉग (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100
दिनांक()
एक नया बनाने के लिए निर्माता है दिनांक
वस्तु। किसी वस्तु के लिए अलग अलग कंस्ट्रक्टर अलग-अलग तर्क दें उसी तरह के ऑब्जेक्ट इंस्टेंस बनाने के लिए विभिन्न विशेषताओं.
जावास्क्रिप्ट में सभी बिल्ट-इन ऑब्जेक्ट्स को तत्काल की तरह नहीं किया जा सकता है दिनांक
. ऐसी वस्तुएं हैं एक निर्माता के साथ नहीं आते हैं: गणित
, JSON
तथा प्रतिबिंबित
, लेकिन वे अभी भी साधारण वस्तु हैं.
उन अंतर्निहित वस्तुओं में, जिनमें कंस्ट्रक्टर हैं, प्रतीक
रचनाकार शैली में नहीं कहा जा सकता एक नया करने के लिए प्रतीक
उदाहरण। यह केवल हो सकता है एक समारोह के रूप में कहा जाता है जो एक नया लौटाता है प्रतीक
मूल्य.
इसके अलावा, उन अंतर्निहित वस्तुओं में से जिनके पास कंस्ट्रक्टर (ओं) हैं, सभी को अपने कंस्ट्रक्टर को कॉल करने की आवश्यकता नहीं है नया
ऑपरेटर को तत्काल करने के लिए. समारोह
, सरणी
, त्रुटि
, तथा रेगुलर एक्सप्रेशन
कार्यों के रूप में भी कहा जा सकता है, बिना उपयोग के नया
कीवर्ड, और वे एक नया ऑब्जेक्ट इंस्टेंस को तुरंत भेज देंगे और वापस कर देंगे.
2. द प्रतिबिंबित
वस्तु
बैकएंड प्रोग्रामर पहले से ही परिचित हो सकते हैं परावर्तन एपीआई. परावर्तन प्रोग्रामिंग भाषाओं की एक विशेषता है कुछ मूलभूत संस्थाओं का निरीक्षण और अद्यतन करें, वस्तुओं और वर्गों के रूप में, चलने के समय पर.
जावास्क्रिप्ट में, आप पहले से ही प्रदर्शन कर सकते हैं कुछ प्रतिबिंब संचालन का उपयोग करना वस्तु
. लेकिन, ए उचित प्रतिबिंब एपीआई अंततः जावास्क्रिप्ट में भी मौजूद था.
प्रतिबिंबित
ऑब्जेक्ट में विधियों का एक सेट है ऑब्जेक्ट इंस्टेंस बनाएं और अपडेट करें. प्रतिबिंबित
वस्तु कंस्ट्रक्टर नहीं है, तो यह के साथ त्वरित नहीं किया जा सकता है नया
ऑपरेटर, और, जैसे गणित
तथा JSON
, यह एक समारोह के रूप में नहीं कहा जा सकता है भी.
हालाँकि, प्रतिबिंबित
एक है के बराबर नया
ऑपरेटर: द Reflect.construct ()
तरीका.
Reflect.construct (लक्ष्य, तर्कवाद [, newTarget])
दोनों लक्ष्य
और वैकल्पिक NEWTARGET
तर्क हैं ऑब्जेक्ट्स के अपने निर्माता हैं, जबकि argumentsList
एक है तर्कों की सूची के कंस्ट्रक्टर को पास किया जाए लक्ष्य
.
var dt = Reflect.construct (दिनांक, [2017, 0, 1]); console.log (डीटी); // Sun Jan 01 2017 00:00:00 GMT + 0100
ऊपर का कोड एक ही प्रभाव है तत्काल के रूप में दिनांक()
का उपयोग करते हुए नया
ऑपरेटर। हालांकि आप अभी भी उपयोग कर सकते हैं नया
, प्रतिबिंब एक है ECMAScript 6 मानक. यह आपको अनुमति भी देता है का उपयोग करें NEWTARGET
तर्क, जो एक और फायदा है नया
ऑपरेटर.
का मूल्य NEWTARGET
प्रोटोटाइप है (सटीक होने के लिए, यह प्रोटोटाइप है NEWTARGET
के निर्माता) नए बने उदाहरण का प्रोटोटाइप बन जाता है.
एक प्रोटोटाइप है किसी वस्तु की संपत्ति, जिसका मूल्य है एक वस्तु भी, मूल वस्तु के गुणों को ले जाना। संक्षेप में, किसी वस्तु को उसके प्रोटोटाइप से उसके सदस्य मिलते हैं.
यहां, आइए एक उदाहरण देखें:
क्लास ए कंस्ट्रक्टर () this.message = function () कंसोल.लॉग (ए से मैसेज) क्लास बी कंस्ट्रक्टर () मैसेज () कंसोल.लॉग (बी से मैसेज)) data () कंसोल.लॉग ('B से डेटा') obj = Reflect.construct (A, [], B) कंसोल.log (obj.message ()); // कंसोल से संदेश ।log (obj.data ()); // डेटा बी कंसोल.लॉग (ओब्ज इंस्टोफ बी) // सच
पास करके बी
तीसरे तर्क के रूप में Reflect.construct ()
, के प्रोटोटाइप मूल्य obj
वस्तु है एक ही होना के प्रोटोटाइप के रूप में बी
निर्माता (जिसके पास गुण हैं संदेश
तथा डेटा
).
इस प्रकार, obj
तक पहुँच सकते हैं संदेश
तथा डेटा
, इसके प्रोटोटाइप पर उपलब्ध है। लेकिन जबसे obj
का उपयोग कर बनाया गया है ए
, इसका भी अपना है संदेश
यह से प्राप्त किया ए
.
भले ही obj
एक सरणी के रूप में बनाया गया है, यह है का उदाहरण नहीं सरणी
, क्योंकि इसका प्रोटोटाइप सेट है वस्तु
.
obj = Reflect.construct (Array, [1,2,3], ऑब्जेक्ट) कंसोल.log (obj) // Array [1, 2, 3] कंसोल.log (obj instof सरणी) // false
Reflect.construct ()
जब आप एक ऑब्जेक्ट बनाना चाहते हैं तो उपयोगी हो सकता है एक से अधिक ब्लूप्रिंट का उपयोग करना.
3. द Object.create ()
तरीका
आप भी बना सकते हैं एक विशिष्ट प्रोटोटाइप के साथ नई साधारण वस्तु के जरिए Object.create ()
. यह भी, का उपयोग करने के लिए बहुत समान लग सकता है नया
ऑपरेटर, लेकिन यह नहीं है.
Object.create (O [, propertiesObject])
हे
तर्क एक वस्तु है प्रोटोटाइप का कार्य करता है नई वस्तु के लिए जो बनाई जाएगी। वैकल्पिक propertiesObject
तर्क एक है गुणों की सूची आप नई वस्तु में जोड़ना चाह सकते हैं.
वर्ग ए कंस्ट्रक्टर () संदेश () कंसोल.लॉग (ए से संदेश) var obj = Object.create (नया A), डेटा: लेखन: सत्य, विन्यास: सच, मूल्य: function () obj से डेटा वापस ') कंसोल .log (obj.message ()) // संदेश से A कंसोल.log (obj.data ()) // डेटा obj obj1 = Object.create (# new A (), foo: writable: true, configurable: true, value: function () वापसी 'foo from obj1') कंसोल.लॉग (obj1.message ()) // संदेश एक कंसोल से। log (obj1.foo ()) // foo from obj1
में obj
ऑब्जेक्ट, अतिरिक्त संपत्ति है डेटा
, जब में obj1
, आईटी इस foo
. तो, जैसा कि आप देखते हैं, हम कर सकते हैं गुण और विधियाँ एक नई वस्तु में जोड़े गए.
जब आप बनाना चाहते हैं तो यह बहुत अच्छा है एक ही तरह की कई वस्तुएं लेकिन इसके साथ विभिन्न पूरक गुण या तरीके. Object.create ()
वाक्यविन्यास उन सभी को अलग से कोड करने की परेशानी से बचाता है.