मालवेअर हे अनाहूत किंवा धोकादायक प्रोग्राम आहेत जे...
![व्हायरस आणि मालवेअर काढून टाकण्यासाठी सर्वोत्तम उपयुक्तता](https://i2.wp.com/webhelper.info/images/danger.jpg)
JavaScript ही ऑब्जेक्ट ओरिएंटेड भाषा आहे. लूप आणि रिलेशनल ऑपरेटर्स सारख्या मूलभूत भाषेच्या रचनांचा अपवाद वगळता, JavaScript चे जवळजवळ प्रत्येक वैशिष्ट्य ऑब्जेक्ट्सचा वापर करून एक प्रकारे किंवा दुसर्या प्रकारे लागू केले जाते.
काहीवेळा विशिष्ट कार्ये करण्यासाठी ऑब्जेक्ट्सचा वापर स्पष्टपणे केला जातो, जसे की डॉक्युमेंट ऑब्जेक्ट मॉडेलवर आधारित (X)HTML आणि XML दस्तऐवजांवर प्रक्रिया करणे. इतर प्रकरणांमध्ये, ऑब्जेक्ट्सची भूमिका कमी स्पष्ट असते, जसे की आदिम स्ट्रिंग डेटासह कार्य करताना स्ट्रिंग ऑब्जेक्टची भूमिका.
मागील प्रकरणांमध्ये अंगभूत ऑब्जेक्ट्सची उपयुक्तता स्पष्टपणे दर्शवणारी उदाहरणे दिली आहेत, परंतु या प्रकरणात आपण थेट JavaScript ऑब्जेक्ट्समध्ये जाऊ.
JavaScript मधील ऑब्जेक्ट्स चार गटांमध्ये विभागल्या जाऊ शकतात.
एक वस्तूआदिम डेटा प्रकार, फंक्शन्स आणि अगदी इतर वस्तूंसह डेटाचा एक क्रमरहित संग्रह आहे. ऑब्जेक्ट्सचा फायदा असा आहे की ते विशिष्ट कार्य करण्यासाठी आवश्यक असलेले सर्व डेटा आणि तर्क एकाच ठिकाणी केंद्रित करतात. स्ट्रिंग ऑब्जेक्ट मजकूर डेटा संचयित करते आणि त्यावर कार्य करण्यासाठी आवश्यक असलेली अनेक कार्ये ऑफर करते. प्रोग्रामिंग भाषेत ऑब्जेक्ट्सची उपस्थिती अजिबात आवश्यक नसली तरी (उदाहरणार्थ, C भाषेत कोणतेही ऑब्जेक्ट नाहीत), ते नक्कीच भाषेचा वापर सुलभ करतात.
कन्स्ट्रक्टर वापरून ऑब्जेक्ट तयार केला जातो - एक विशेष प्रकारचा फंक्शन जो ऑब्जेक्टने व्यापलेली मेमरी सुरू करून नवीन ऑब्जेक्ट वापरण्यासाठी तयार करतो. अध्याय 4 मध्ये, आम्ही पाहिले की ऑब्जेक्ट्स त्यांच्या कन्स्ट्रक्टरला नवीन ऑपरेटर लागू करून तयार केले जाऊ शकतात. या ऑपरेशनचा वापर केल्याने कन्स्ट्रक्टर नवीन ऑब्जेक्ट तयार करतो, ज्याचे स्वरूप कन्स्ट्रक्टरला कॉल केल्यानुसार निर्धारित केले जाते. उदाहरणार्थ, String() कन्स्ट्रक्टर स्ट्रिंग ऑब्जेक्ट्स तयार करतो आणि Array() कन्स्ट्रक्टर Array ऑब्जेक्ट्स तयार करतो. अशा प्रकारे JavaScript मध्ये ऑब्जेक्ट प्रकारांची नावे दिली जातात: ऑब्जेक्ट तयार करणाऱ्या कन्स्ट्रक्टरच्या नावाने.
ऑब्जेक्ट तयार करण्याचे येथे एक साधे उदाहरण आहे:
var शहर = नवीन स्ट्रिंग();
हे विधान एक नवीन स्ट्रिंग ऑब्जेक्ट तयार करते आणि शहर व्हेरिएबलमध्ये त्याचा संदर्भ देते. येथे, कन्स्ट्रक्टरला कोणतेही वितर्क दिलेले नाहीत, त्यामुळे सिटी व्हेरिएबलला त्याचे डीफॉल्ट मूल्य प्राप्त होईल—या प्रकरणात, रिक्त स्ट्रिंग. प्रारंभिक मूल्य निर्दिष्ट करणाऱ्या कन्स्ट्रक्टरला युक्तिवाद देऊन तुम्ही हे उदाहरण अधिक मनोरंजक बनवू शकता:
var शहर = नवीन स्ट्रिंग("सॅन डिएगो");
ऑब्जेक्ट्स हे JavaScript चा आधारशिला आहेत. अनेक अंगभूत डेटा प्रकार ऑब्जेक्ट्स म्हणून प्रस्तुत केले जातात. यशस्वी JavaScript डेव्हलपर होण्यासाठी, ते कसे कार्य करतात याची तुम्हाला स्पष्ट माहिती असणे आवश्यक आहे. ऑब्जेक्टच्या बिल्डिंग ब्लॉक्सना त्याचे फील्ड किंवा JavaScript ऑब्जेक्ट गुणधर्म म्हणतात. ते ऑब्जेक्टच्या कोणत्याही पैलूचे वर्णन करण्यासाठी वापरले जातात. मालमत्तेमध्ये सूचीची लांबी, आकाशाचा रंग किंवा एखाद्या व्यक्तीच्या जन्मतारीखचे वर्णन केले जाऊ शकते. वस्तू तयार करणे ही एक सोपी प्रक्रिया आहे. भाषा ऑब्जेक्ट लिटरल म्हणून ओळखले जाणारे वाक्यरचना प्रदान करते, जे कुरळे ब्रेसेसद्वारे दर्शविले जाते.
भाषा गुणधर्मांमध्ये प्रवेश करण्यासाठी दोन प्रविष्ट्या प्रदान करते. प्रथम आणि सर्वात सामान्य डॉट नोटेशन म्हणून ओळखले जाते. डॉट नोटेशनमध्ये, होस्ट ऑब्जेक्टचे नाव, त्यानंतर कालावधी आणि मालमत्तेचे नाव निर्दिष्ट करून संसाधनात प्रवेश केला जाऊ शकतो. उदाहरणार्थ, जेव्हा object.foo सुरुवातीला एक वर सेट केले होते, तेव्हा JavaScript ऑब्जेक्ट स्टेटमेंट कार्यान्वित झाल्यानंतर त्याचे मूल्य 2 होईल.
पर्यायी प्रवेश वाक्यरचना ब्रॅकेट नोटेशन म्हणून ओळखली जाते. नोटेशनमध्ये, ऑब्जेक्टचे नाव चौकोनी कंसाच्या संचाने पाठवले जाते. त्यांच्यामध्ये, मालमत्तेचे नाव स्ट्रिंग म्हणून निर्दिष्ट केले आहे:
ऑब्जेक्ट["foo"] = ऑब्जेक्ट["foo"] + 1.
हे डॉट नोटेशनपेक्षा अधिक अर्थपूर्ण आहे कारण ते व्हेरिएबलला प्रॉपर्टीच्या नावाचे सर्व किंवा काही भाग निर्दिष्ट करण्यास अनुमती देते. हे शक्य आहे कारण JavaScript ऑब्जेक्ट इंटरप्रिटर आपोआप या अभिव्यक्तीला स्ट्रिंगमध्ये रूपांतरित करतो आणि नंतर संबंधित गुणधर्म प्राप्त करतो. "oo" या स्ट्रिंगसह f व्हेरिएबलची सामग्री एकत्रित करून मालमत्तेची नावे तयार केली जातात:
ऑब्जेक्ट = "बार".
ब्रॅकेट नोटेशन प्रॉपर्टीच्या नावांमध्ये डॉट नोटेशनमध्ये प्रतिबंधित असलेले वर्ण समाविष्ट करण्यास अनुमती देते. उदाहरणार्थ, खालील विधान कंसात पूर्णपणे कायदेशीर आहे. तथापि, वापरकर्त्याने समान गुणधर्माचे नाव डॉट नोटेशनमध्ये तयार करण्याचा प्रयत्न केल्यास, त्यांना वाक्यरचना त्रुटी आढळेल:
ऑब्जेक्ट["!@#$% &*()."] = खरे.
नेस्टेड JavaScript ऑब्जेक्ट्सचे गुणधर्म चेनिंग डॉट्स आणि/किंवा कंस द्वारे ऍक्सेस केले जाऊ शकतात. उदाहरणार्थ, खालील ऑब्जेक्टमध्ये baz नावाचा एक नेस्टेड ऑब्जेक्ट आहे ज्यामध्ये foo नावाचा दुसरा ऑब्जेक्ट आहे ज्यामध्ये बार नावाची प्रॉपर्टी आहे ज्यामध्ये पाच मूल्य आहे:
var ऑब्जेक्ट = ( baz: ( foo: ( bar: 5 ) ) ).
खालील अभिव्यक्ती बार संलग्न मालमत्तेमध्ये प्रवेश करतात. पहिली अभिव्यक्ती डॉट नोटेशन वापरते, तर दुसरी एक्स्प्रेशन स्क्वेअर नोटेशन वापरते. तिसरा अभिव्यक्ती समान परिणाम प्राप्त करण्यासाठी दोन्ही नोंदी एकत्र करते:
मागील उदाहरणामध्ये दर्शविल्याप्रमाणे अभिव्यक्ती चुकीच्या पद्धतीने वापरल्यास कार्यप्रदर्शन खराब होऊ शकते आणि JavaScript ऑब्जेक्ट अयशस्वी होऊ शकते. प्रत्येक बिंदू किंवा कंस अभिव्यक्तीचे मूल्यांकन करण्यासाठी वेळ लागतो. जर एकच गुणधर्म अनेक वेळा वापरला गेला असेल, तर मालमत्तेमध्ये एकदा प्रवेश करणे आणि नंतर भविष्यातील सर्व वापरांसाठी स्थानिक व्हेरिएबलमध्ये मूल्य संचयित करणे अर्थपूर्ण आहे.
जेव्हा फंक्शनचा वापर ऑब्जेक्टचा गुणधर्म म्हणून केला जातो तेव्हा त्याला पद्धत म्हणतात. गुणधर्मांप्रमाणे, ते ऑब्जेक्ट शाब्दिक नोटेशनमध्ये निर्दिष्ट केले आहेत. उदाहरणार्थ:
var ऑब्जेक्ट = ( बेरीज: फंक्शन(फू, बार) ( रिटर्न foo + बार; ) ).
मार्क्स आणि कंस वापरून JavaScript ऑब्जेक्ट पद्धती कॉल केल्या जाऊ शकतात. खालील उदाहरण दोन्ही नोंदी वापरून मागील उदाहरणातील sum() पद्धत कॉल करते:
ऑब्जेक्ट शाब्दिक नोटेशन नवीन ऑब्जेक्ट्स तयार करण्यासाठी उपयुक्त आहे, परंतु ते विद्यमान वस्तूंमध्ये गुणधर्म किंवा पद्धती जोडू शकत नाही. सुदैवाने, नवीन डेटा जोडणे हे असाइनमेंट स्टेटमेंट तयार करण्याइतके सोपे आहे. रिक्त वस्तू तयार केली जाते. त्यानंतर, असाइनमेंट ऑपरेटर वापरून, आम्ही दोन गुणधर्म, foo, आणि bar आणि baz पद्धत जोडतो:
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंगची मूळ कल्पना म्हणजे प्रोग्रामचे लहान भागांमध्ये विभाजन करणे आणि प्रत्येक भागाला स्वतःचे राज्य व्यवस्थापित करण्यासाठी जबाबदार बनवणे. अशा प्रकारे, प्रोग्रामचा एक भाग कसा कार्य करतो याबद्दल काही ज्ञान त्या भागासाठी स्थानिक असू शकते. उर्वरित प्रोग्रामवर काम करणाऱ्या एखाद्याला त्याबद्दल आठवत नाही किंवा माहित नसावे. जेव्हा जेव्हा हा स्थानिक डेटा बदलतो तेव्हा फक्त त्याच्या आसपासचा कोड अपडेट करणे आवश्यक असते.
अशा प्रोग्रामचे विविध भाग इंटरफेसद्वारे एकमेकांशी संवाद साधतात, फंक्शन्सचे मर्यादित संच किंवा त्यांची अचूक अंमलबजावणी लपवताना अधिक अमूर्त स्तरावर उपयुक्त कार्यक्षमता प्रदान करतात. प्रोग्रामचे असे भाग ऑब्जेक्ट्स वापरून मॉडेल केले जातात. त्यांच्या इंटरफेसमध्ये पद्धती आणि गुणधर्मांचा विशिष्ट संच असतो. इंटरफेसचा भाग असलेल्या गुणधर्मांना सार्वजनिक म्हणतात. उर्वरित, ज्यांना बाह्य कोड स्पर्श करू नये, त्यांना खाजगी म्हणतात.
बऱ्याच भाषा सार्वजनिक आणि खाजगी मालमत्तांमध्ये फरक करण्याची क्षमता प्रदान करतात आणि बाह्य कोडला खाजगीमध्ये प्रवेश करण्याची परवानगी देत नाहीत. JavaScript, पुन्हा किमान दृष्टीकोन घेऊन, अद्याप तेथे नाही. ही भाषा जोडण्याचे काम सध्या सुरू आहे. म्हणून, JavaScript प्रोग्रामर ही कल्पना यशस्वीरित्या वापरतील. सामान्यतः, उपलब्ध इंटरफेसचे वर्णन दस्तऐवजीकरण किंवा टिप्पण्यांमध्ये केले जाते. मालमत्ता खाजगी आहेत हे दर्शविण्यासाठी मालमत्तेच्या नावाच्या सुरुवातीला अंडरस्कोर (_) लावणे देखील सामान्य आहे. अंमलबजावणीपासून इंटरफेस वेगळे करणे ही एक चांगली कल्पना आहे. याला सहसा एन्कॅप्सुलेशन म्हणतात.
कंस (...) असलेल्या ऑब्जेक्टला ऑब्जेक्ट शब्दशः म्हणतात. तुम्ही अशा कंसात (...) काही गुणधर्म ताबडतोब ठेवू शकता. उदाहरणार्थ, "की: मूल्य आणि याप्रमाणे" जोड्या:
वापरकर्ता = ( // ऑब्जेक्टचे नाव: "जॉन", // की "नाव" स्टोअर व्हॅल्यू "John) द्वारे" age: 30 // by key "age" store value 30 }.!}
कोलन ":" च्या आधी प्रॉपर्टीमध्ये एक की ("नाव" किंवा "आयडेंटिफायर" म्हणूनही ओळखली जाते) असते आणि तिच्या उजवीकडे एक मूल्य असते. वापरकर्ता ऑब्जेक्टमध्ये दोन गुणधर्म आहेत. परिणामी JavaScript वापरकर्ता ऑब्जेक्ट "नाव" आणि "वय" लेबल केलेल्या दोन स्वाक्षरी केलेल्या फायलींसह. तुम्ही त्यामधून कधीही फाइल्स जोडू, हटवू आणि वाचू शकता. डॉट नोटेशन वापरून प्रॉपर्टी व्हॅल्यूज ऍक्सेस केले जातात. ते कोणत्याही प्रकारचे असू शकते. तुम्ही बुलियन मूल्य जोडू शकता. प्रॉपर्टी काढून टाकण्यासाठी, JavaScript ऑब्जेक्टच्या एरर केसवर डिलीट वापरा.
सर्व JavaScript त्रुटी ऑब्जेक्ट्स एरर ऑब्जेक्ट किंवा वारसा मिळालेल्या ऑब्जेक्टचे वंशज आहेत:
अनुप्रयोग JavaScript त्रुटींशी कसे व्यवहार करतात हे समजून घेण्यासाठी आणखी खोलवर जाण्यासाठी, Airbrake JavaScript, रिअल-टाइम अलर्टसाठी त्रुटी ट्रॅकिंग साधन आणि तुमच्या JavaScript कोडमध्ये काय चूक झाली याची झटपट अंतर्दृष्टी पहा.
JavaScript ऑब्जेक्ट हटवण्यापूर्वी वापरकर्त्यास प्राप्त होणारे त्रुटी संदेश:
तुम्ही ऑब्जेक्ट अक्षरशः मध्ये चौरस कंस वापरू शकता. त्यांना गणना केलेले गुणधर्म म्हणतात. खाली एक उदाहरण दिले आहे.
गणना केलेल्या मालमत्तेचा अर्थ सोपा आहे: याचा अर्थ असा की मालमत्तेचे नाव फळावरून घेतले पाहिजे. म्हणून जर एखादा पाहुणा "सफरचंद" मध्ये प्रवेश करतो, तर पिशवी होईल (सफरचंद: 5). आपण चौरस कंसात अधिक जटिल अभिव्यक्ती वापरू शकता:
let fruit = "सफरचंद";
: 5 // bag.appleComputers = 5
चौकोनी कंस हे डॉट नोटेशनपेक्षा जास्त शक्तिशाली असतात. ते मालमत्तेची नावे आणि चलांना परवानगी देतात. पण ते लिहिण्यासही जास्त त्रासदायक आहेत. म्हणून बहुतेक वेळा, जेव्हा मालमत्तेची नावे ज्ञात आणि सोपी असतात, तेव्हा एक बिंदू वापरला जातो. आणि जर तुम्हाला काहीतरी अधिक क्लिष्ट हवे असेल तर स्क्वेअर ब्रॅकेटवर स्विच करा.
व्हेरिएबलमध्ये "फॉर", "लेट", "रिटर्न" इत्यादी राखीव शब्दांपैकी एकाचे नाव असू शकत नाही. परंतु JavaScript ऑब्जेक्ट्सची क्रमवारी लावताना, असे कोणतेही बंधन नाही.
तत्वतः, कोणत्याही नावाला परवानगी आहे, परंतु एक विशेष आहे: ऐतिहासिक कारणांसाठी "__प्रोटो__" ला विशेष उपचार मिळतात. उदाहरणार्थ, तुम्ही ते ऑब्जेक्ट व्यतिरिक्त अन्य मूल्यावर सेट करू शकत नाही:
obj.__proto__ = 5;
इशारा(obj.__proto__); // हेतूनुसार कार्य केले नाही
तुम्ही कोडवरून पाहू शकता की, आदिम 5 चा उद्देश दुर्लक्षित केला आहे. जर ऑपरेटर एखाद्या ऑब्जेक्टमध्ये अनियंत्रित की-व्हॅल्यू जोड्या संग्रहित करू इच्छित असेल आणि अभ्यागताला की निर्दिष्ट करण्यास अनुमती देत असेल तर हे त्रुटी आणि अगदी भेद्यता देखील असू शकते. या प्रकरणात, अभ्यागत की म्हणून "प्रोटो" निवडू शकतो आणि ऑब्जेक्टमध्ये JavaScript जोडू शकतो. __प्रोटो__ ने हाताळलेल्या वस्तूंना नियमित गुणधर्म बनवण्याचा एक मार्ग आहे. डेटा स्ट्रक्चर्सचा दुसरा नकाशा देखील आहे जो अनियंत्रित की ला समर्थन देतो.
येथे "पूर्णांक गुणधर्म" या शब्दाचा अर्थ अशी स्ट्रिंग आहे जी बदलाशिवाय पूर्णांकातून रूपांतरित केली जाऊ शकते. म्हणून, उदाहरणार्थ, "49" हे पूर्णांक गुणधर्माचे नाव आहे कारण जेव्हा ते पूर्णांकात रूपांतरित केले जाते आणि पुन्हा परत केले जाते तेव्हा ते समान असते. पण “+49” आणि “1.2” असे नाहीत. दुसरीकडे, जर की पूर्णांक नसतील, तर त्या तयार केलेल्या क्रमाने सूचीबद्ध केल्या जातात. खाली उदाहरण.
डायलिंग कोडच्या समस्येचे निराकरण करण्यासाठी, तुम्ही कोड अपूर्ण करून "फसवणूक" करू शकता. प्रत्येक कोडच्या आधी "+" (अधिक चिन्ह) जोडणे पुरेसे आहे. आता ते इच्छेप्रमाणे कार्य करेल.
वस्तू आणि आदिम यांच्यातील फरक म्हणजे ते "संदर्भानुसार" संग्रहित आणि कॉपी केले जातात. आदिम मूल्ये नियुक्त केली जातात आणि "पूर्णांक मूल्य म्हणून" कॉपी केली जातात. व्हेरिएबल ऑब्जेक्ट स्वतः किंवा त्याचा "संदर्भ" ऐवजी "मेमरीमधील पत्ता" संग्रहित करतो. तुम्ही कोणत्याही व्हेरिएबलमध्ये प्रवेश करण्यासाठी आणि त्यातील सामग्री बदलण्यासाठी वापरू शकता.
वरील उदाहरण दर्शविते की लॉग इन करण्यासाठी एकच ऑब्जेक्ट आणि प्रशासक आहे. नंतर, नंतर वेगळी की (वापरकर्ता) वापरली असल्यास, वापरकर्त्याला बदल लक्षात येतील.
ऑब्जेक्ट्ससाठी समानता ऑपरेटर == आणि कठोर समानता === त्याच प्रकारे कार्य करतात. दोन वस्तू समान असतील तरच ते समान असतात. obj1 > obj2 सारख्या तुलनांसाठी किंवा आदिम obj == 5 शी तुलना करण्यासाठी, वस्तूंचे रूपांतर आदिममध्ये केले जाते. खरे सांगायचे तर, अशा तुलना फार क्वचितच आवश्यक असतात आणि सहसा कोडिंग त्रुटीचा परिणाम असतो.
ऑब्जेक्ट्सना कोणत्याही मालमत्तेमध्ये प्रवेश असतो. तथापि, जर ते अजिबात अस्तित्वात नसेल, तर ती त्रुटी असणार नाही. केवळ अस्तित्वात नसलेल्या मालमत्तेमध्ये प्रवेश केल्याने अपरिभाषित परतावा मिळतो. हे मालमत्तेची चाचणी करण्याचा आणि अपरिभाषित एकाशी तुलना करण्याचा एक सामान्य मार्ग प्रदान करते. खाली एक उदाहरण आहे.
अपरिभाषित संचयित केलेल्या गुणधर्मांसाठी "इन" वापरणे. सहसा कठोर "=== अपरिभाषित" तुलना तपासणी चांगले कार्य करते. एक विशेष केस आहे जिथे ते अयशस्वी होते आणि "इन" योग्यरित्या कार्य करते. जेव्हा एखाद्या वस्तूची मालमत्ता अस्तित्वात असते परंतु अपरिभाषित राहते तेव्हा असे होते.
वरील कोडमध्ये, obj.test मालमत्ता तांत्रिकदृष्ट्या अस्तित्वात आहे. त्यामुळे इन ऑपरेटर योग्यरित्या कार्य करते. अशा परिस्थिती फार दुर्मिळ आहेत कारण अपरिभाषित सहसा नियुक्त केले जात नाही. शून्य "अज्ञात" किंवा "रिक्त" मूल्ये बहुतेक वापरली जातात. अशा प्रकारे, इन ऑपरेटर कोडमध्ये प्रभावीपणे अतिथी आहे.
सर्व कळांमधून ऑब्जेक्टवरून ऑब्जेक्टवर जाण्यासाठी, लूपचा एक विशेष प्रकार आहे: for..in. ही for(;;) रचना पेक्षा पूर्णपणे वेगळी गोष्ट आहे.
खाली एक उदाहरण आहे.
कृपया लक्षात घ्या की सर्व "साठी" कन्स्ट्रक्टर तुम्हाला लूपमधील लूपिंग व्हेरिएबल लेट की म्हणून घोषित करण्याची परवानगी देतात. वैकल्पिकरित्या, तुम्ही त्याऐवजी भिन्न व्हेरिएबल नाव, की वापरू शकता.
उदाहरणार्थ, for(let prop in obj) देखील मोठ्या प्रमाणावर वापरले जाते.
एक पर्यायी "स्क्वेअर ब्रॅकेट" आहे जो कोणत्याही स्ट्रिंगसह कार्य करतो.
येथे मुद्दा आवश्यक आहे की JavaScript ऑब्जेक्टच्या की वैध व्हेरिएबल आयडेंटिफायर असणे आवश्यक आहे, म्हणजे तेथे कोणतेही रिक्त स्थान किंवा इतर प्रतिबंध नाहीत. कंसातील ओळ योग्यरित्या उद्धृत केली आहे याची खात्री करण्यासाठी काळजी घेणे आवश्यक आहे. स्क्वेअर ब्रॅकेट्स व्हेरिएबलमधील शाब्दिक स्ट्रिंगच्या विरूद्ध, कोणत्याही अभिव्यक्तीच्या परिणामातून गुणधर्म नाव मिळविण्याचा मार्ग देखील प्रदान करतात:
let key = "पक्षी आवडतात";
// user as same["likes birds"] = खरे;
वापरकर्ता = खरे.
येथे की व्हेरिएबलची रनटाइमच्या वेळी गणना केली जाऊ शकते आणि वापरकर्त्याच्या इनपुटवर अवलंबून असते आणि नंतर प्रॉपर्टीमध्ये प्रवेश करण्यासाठी वापरली जाते. हे प्रोग्रामरना अधिक लवचिकता देते. डॉट नोटेशन त्याच प्रकारे वापरले जाऊ शकत नाही, कारण ते JavaScript ऑब्जेक्टवर पुनरावृत्ती करेल. खाली एक उदाहरण आहे.
घोषित कॉन्स्ट ऑब्जेक्ट सुधारित केले जाऊ शकते. खाली एक उदाहरण दिले आहे.
ओळीतील JavaScript ऑब्जेक्ट (*) एरर टाकेल असे वाटू शकते, परंतु तसे नाही. कारण const वापरकर्त्याचे मूल्य स्वतःच कॅप्चर करते. आणि येथे वापरकर्ता नेहमी एकाच वस्तूचा संदर्भ ठेवतो. ओळ (*) ऑब्जेक्टच्या आत जाते, ती वापरकर्त्याला पुन्हा नियुक्त केलेली नाही. आपण वापरकर्ता आणि दुसरे काहीतरी सेट करण्याचा प्रयत्न केल्यास Const त्रुटी देईल. क्लोनिंग आणि विलीनीकरण, Object.assign त्याच ऑब्जेक्टला डुप्लिकेट करणे आवश्यक असल्यास त्याचा दुसरा संदर्भ तयार करते. हे देखील शक्य आहे, परंतु थोडे अधिक कठीण आहे कारण JavaScript मध्ये अंगभूत पद्धत नाही. खरं तर, हे क्वचितच आवश्यक आहे. संदर्भानुसार कॉपी करणे बहुतेक प्रकरणांमध्ये वापरले जाते. परंतु जर तुम्हाला याची खरोखर गरज असेल, तर तुम्हाला JavaScript ऑब्जेक्ट तयार करणे आवश्यक आहे आणि विद्यमान रचनेची प्रतिकृती तयार करणे आवश्यक आहे, त्याचे गुणधर्म आदिम स्तरावर कॉपी करणे आवश्यक आहे. खाली एक उदाहरण आहे.
आणि यासाठी तुम्ही Object.assign पद्धत देखील वापरू शकता. arguments dest आणि src1, ..., srcN हे ऑब्जेक्ट आहेत. हे सर्व ऑब्जेक्ट्सचे गुणधर्म src1, ..., srcNINTO dest कॉपी करते. दुसऱ्या शब्दांत, सर्व वितर्कांचे गुणधर्म, दुसऱ्यापासून सुरू होणारे, 1 ला कॉपी केले जातात. मग ते गंतव्यस्थानावर परत येते. उदाहरणार्थ, आपण अनेक ऑब्जेक्ट्स एकामध्ये एकत्र करण्यासाठी ते वापरू शकता.
आणि साधे क्लोन लूप बदलण्यासाठी तुम्ही Object.assign देखील वापरू शकता. हे वापरकर्त्याचे सर्व गुणधर्म रिकाम्या ऑब्जेक्टवर कॉपी करते आणि लूपप्रमाणेच, परंतु लहान परत करते. आत्तापर्यंत, असे गृहीत धरले गेले आहे की सर्व वापरकर्ता गुणधर्म आदिम आहेत. परंतु गुणधर्म इतर वस्तूंचे संदर्भ असू शकतात.
याचे निराकरण करण्यासाठी, तुम्हाला क्लोन लूप वापरणे आवश्यक आहे जे प्रत्येक वापरकर्ता मूल्य तपासते आणि, जर ते ऑब्जेक्ट असेल, तर त्याची रचना प्रतिरूपित करते. याला ‘डीप क्लोनिंग’ म्हणतात.
एक मानक डीप क्लोनिंग अल्गोरिदम आहे जो वरील केस आणि अधिक जटिल केसेस हाताळतो ज्याला स्ट्रक्चर्ड क्लोनिंग अल्गोरिदम म्हणतात. चाक पुन्हा शोधणे टाळण्यासाठी, तुम्ही lodash JavaScript लायब्ररीमधून कार्यरत अंमलबजावणी वापरू शकता, या पद्धतीला _.cloneDeep(obj) म्हणतात.
जर एखादा प्रोग्रामर एखाद्या ऑब्जेक्टवर लूप करतो आणि सर्व गुणधर्म ज्या क्रमाने जोडले होते त्याच क्रमाने मिळवू इच्छित असल्यास, तो "स्पेशल ऑर्डरिंग" वर अवलंबून राहू शकतो, जेथे पूर्णांक गुणधर्मांची क्रमवारी लावली जाते आणि इतर JavaScript ऑब्जेक्ट ज्या क्रमाने तयार केले गेले होते त्या क्रमाने तयार केले जातात. .
प्रगत ऑब्जेक्ट पद्धती संकल्पनांना सामोरे जातात ज्या JavaScripting मध्ये क्वचितच वापरल्या जातात. हे असे आहे कारण सामान्य परिस्थितींमध्ये या शक्तिशाली वैशिष्ट्यांची आवश्यकता नसते. यापैकी काही पद्धती जुन्या ब्राउझरमध्ये कार्य करू शकत नाहीत, जसे की Netscape 4 च्या सुरुवातीच्या प्रकाशन.
प्रोटोटाइप JavaScript ऑब्जेक्ट्स आणि सर्व मायसर्कल पद्धती तयार करण्यासाठी वापरला जाऊ शकतो, फक्त नवीन नाही. याचा संमिश्र कार्यप्रदर्शन प्रभाव आहे. त्यांना प्रत्येक ऑब्जेक्टच्या उदाहरणासाठी पद्धतींच्या वेगळ्या प्रती संग्रहित करण्याची गरज नाही, त्यामुळे त्यांना ऑपरेट करण्यासाठी कमी मेमरी आवश्यक असू शकते, परंतु ब्राउझरने त्यांना शोधण्यासाठी वर्तमान आणि पालक स्कोप शोधणे आवश्यक आहे. यामुळे अत्यंत विलंब होऊ शकतो. सामान्यतः, वापरकर्त्याने कार्यप्रदर्शनावर निर्णय घेण्याऐवजी कोडसाठी योग्य ते वापरावे, जोपर्यंत ते अतिशय विशिष्ट नियंत्रित वातावरणाशी व्यवहार करत नाहीत.
काही प्रकरणांमध्ये, एखाद्या वस्तूच्या मालमत्तेला ऑब्जेक्टशी किंवा प्रोटोटाइप साखळीमध्ये कुठेतरी बंधनकारक असणे आवश्यक असू शकते. JavaScript मध्ये, सर्व ऑब्जेक्ट hasOwnProperty पद्धत वापरतात, जी ती प्रॉपर्टी वैयक्तिक ऑब्जेक्टच्या उदाहरणाशी बांधील असल्यास ती सत्य दर्शवते. या प्रकरणात, ऑब्जेक्टच्या कन्स्ट्रक्टरकडे ऑब्जेक्टच्या उदाहरणाप्रमाणे समान मूल्य असलेली समान मालमत्ता आहे की नाही हे तपासणे शक्य होते. ऑब्जेक्ट इंस्टन्स आणि सर्किट प्रोटोटाइप या दोन्हीसाठी समान मूल्य असलेले वेगळे JavaScript ऑब्जेक्ट गुणधर्म असल्यास हे चुकीचे परिणाम देऊ शकते. hasOwnProperty पद्धत एकच पॅरामीटर घेते - स्ट्रिंग म्हणून प्रॉपर्टीचे नाव.
तुम्ही अशाच प्रकारे खाजगी पद्धती तयार करू शकता. हे फक्त एक फंक्शन आहे जे कन्स्ट्रक्टर फंक्शनमध्ये तयार केले जाते. हे काहींना गोंधळात टाकणारे वाटू शकते, परंतु ते कसे कार्य करते. खाजगी फंक्शन केवळ कन्स्ट्रक्टरद्वारे किंवा ओळीवर परिभाषित केलेल्या पद्धतींद्वारे कॉल केले जाऊ शकते. सार्वजनिक कन्स्ट्रक्टरला नियुक्त केल्यास आणि Javascript ऑब्जेक्ट्सच्या सार्वजनिक पद्धतींचा वापर करून प्रवेश केल्यास ते सार्वजनिक पद्धती म्हणून वापरले जाऊ शकतात.
फंक्शन myob() ( फंक्शन cantBeSeen() ( alert(secretValue);
) var secretValue = "";
this.method1 = function () ( secretValue = "कोणतेही आश्चर्य नाही";!}
this.method2 = cantBeSeen;
) var oneOb = नवीन myob();
oneOb.method1();
// अलर्ट "कोणतेही आश्चर्य नाही" oneOb.method2();
// अलर्ट "कोणतेही आश्चर्य नाही".
कमांड ऑब्जेक्ट्स ऑब्जेक्ट्सकडून विनंती जारी करणाऱ्या आणि प्रत्यक्षात विनंतीवर प्रक्रिया करणाऱ्या सिस्टमला वेगळे करून सैलपणे जोडलेल्या सिस्टमला परवानगी देतात. या विनंत्यांना इव्हेंट म्हणतात आणि विनंत्यांवर प्रक्रिया करणाऱ्या कोडला इव्हेंट हँडलर म्हणतात.
समजा तुम्ही क्लिपबोर्ड कट, कॉपी आणि पेस्ट क्रियांना समर्थन देणारे अनुप्रयोग तयार करत आहात. या क्रिया संपूर्ण ऍप्लिकेशनमध्ये वेगवेगळ्या प्रकारे ट्रिगर केल्या जाऊ शकतात: मेनू सिस्टमद्वारे, संदर्भ मेनू जसे की मजकूर फील्डवर उजवे-क्लिक करणे किंवा कीबोर्ड शॉर्टकट. कमांड ऑब्जेक्ट्स तुम्हाला या क्रियांची प्रक्रिया केंद्रीकृत करण्याची परवानगी देतात, प्रत्येक ऑपरेशनसाठी एक, जेव्हा सर्व कट विनंत्यांवर प्रक्रिया करण्यासाठी फक्त एक कमांड आवश्यक असते, सर्व कॉपी विनंत्यांसाठी एक आणि सर्व पेस्ट विनंत्यांसाठी एक.
कारण संघ सर्व प्रक्रिया केंद्रीकृत करतात, ते संपूर्ण अनुप्रयोगासाठी पूर्ववत कार्ये हाताळण्यात देखील गुंतलेले असतात. आधुनिक JavaScript तंत्रांचा वापर करून लक्षणीय सुधारणा साध्य केल्या जाऊ शकतात, परिणामी अधिक कार्यक्षम, विश्वासार्ह आणि देखरेख करण्यायोग्य अनुप्रयोग बनतात.
हे कसे करायचे हे जाणून घेण्यासाठी, तुम्ही JavaScript + jQuery टेम्पलेट वापरू शकता. या अनन्य पॅकेजमध्ये नेमस्पेस, प्रोटोटाइप, मॉड्यूल, फंक्शन ऑब्जेक्ट्स, क्लोजर, निनावी फंक्शन्स आणि बरेच काही यासारख्या अधिक प्रगत वैशिष्ट्यांचा वापर करून सर्व GoF टेम्पलेट्ससाठी ऑप्टिमाइझ केलेले JavaScript समाविष्ट आहे. वापरकर्त्यांना JavaScript टेम्पलेट्स, jQuery टेम्पलेट्स आणि टेम्पलेट आर्किटेक्चरसाठी नवीनतम साधने आणि तंत्रांची आवश्यकता असल्यास, हे सर्वोत्तम वापर केस आहे. या पॅकेजमध्ये JavaScript विकसकांसाठी मौल्यवान, अद्ययावत माहिती आहे. काय समाविष्ट आहे ते येथे आहे:
सुरुवातीच्या प्रोग्रामरसाठी JavaScript ऑब्जेक्ट सिंटॅक्सच्या प्रस्तावित मूलभूत गोष्टी अतिशय महत्त्वाच्या आहेत. प्रथम वस्तू समजून घेतल्या पाहिजेत, त्यानंतर ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंगचे ज्ञान असेल. या सामग्रीचे सखोल ज्ञान असणे महत्त्वाचे आहे कारण ते उर्वरित JavaScript भाषेचा पाया म्हणून काम करते.
शेवटचे अपडेट: ०४/०८/२०१८
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग हे आज ऍप्लिकेशन डेव्हलपमेंटमधील प्रबळ प्रतिमानांपैकी एक आहे आणि JavaScript मध्ये देखील आपण OOP चा पूर्ण फायदा घेऊ शकतो. त्याच वेळी, JavaScript च्या संबंधात, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंगमध्ये काही वैशिष्ट्ये आहेत.
मागील विषयांमध्ये, आम्ही आदिम डेटासह कार्य केले - संख्या, स्ट्रिंग, परंतु डेटा नेहमी आदिम प्रकार दर्शवत नाही. उदाहरणार्थ, जर आपल्या प्रोग्राममध्ये आपल्याला एखाद्या व्यक्तीचे नाव, वय, लिंग इत्यादींचे सार वर्णन करायचे असेल तर नैसर्गिकरित्या आपण एखाद्या व्यक्तीचे सार संख्या किंवा स्ट्रिंग म्हणून दर्शवू शकणार नाही. व्यक्तीचे योग्य वर्णन करण्यासाठी आम्हाला काही ओळी किंवा अंकांची आवश्यकता असेल. या संदर्भात, एक व्यक्ती एक जटिल जटिल रचना म्हणून कार्य करेल, ज्यामध्ये वैयक्तिक गुणधर्म असतील - वय, उंची, नाव, आडनाव इ.
अशा संरचनांसह कार्य करण्यासाठी, JavaScript वापरते. प्रत्येक ऑब्जेक्ट त्याच्या स्थितीचे वर्णन करणारे गुणधर्म आणि त्याच्या वर्तनाचे वर्णन करणाऱ्या पद्धती संचयित करू शकते
नवीन ऑब्जेक्ट तयार करण्याचे अनेक मार्ग आहेत.
ऑब्जेक्ट कन्स्ट्रक्टर वापरण्याचा पहिला मार्ग आहे:
वर वापरकर्ता = नवीन ऑब्जेक्ट ();
या प्रकरणात, ऑब्जेक्टला वापरकर्ता म्हणतात. हे var कीवर्ड वापरून कोणत्याही नियमित व्हेरिएबल प्रमाणेच परिभाषित केले आहे.
नवीन ऑब्जेक्ट() अभिव्यक्ती कन्स्ट्रक्टरला कॉल दर्शवते, एक फंक्शन जे नवीन ऑब्जेक्ट तयार करते. नवीन ऑपरेटरचा वापर कन्स्ट्रक्टरला कॉल करण्यासाठी केला जातो. कन्स्ट्रक्टरला कॉल करणे हे एक नियमित फंक्शन कॉल करण्यासारखे आहे.
ऑब्जेक्ट तयार करण्याचा दुसरा मार्ग म्हणजे कुरळे ब्रेसेस वापरणे:
वर वापरकर्ता = ();
आज, दुसरी पद्धत अधिक सामान्य आहे.
एखादी वस्तू तयार केल्यानंतर, आपण त्यावर गुणधर्म परिभाषित करू शकतो. प्रॉपर्टीची व्याख्या करण्यासाठी, तुम्हाला ऑब्जेक्टच्या नावापुढे प्रॉपर्टीचे नाव, बिंदूने विभक्त करणे आणि त्यास एक मूल्य नियुक्त करणे आवश्यक आहे:
वर वापरकर्ता = (); user.name = "टॉम"; user.age = 26;
या प्रकरणात, दोन गुणधर्मांचे नाव आणि वय घोषित केले जाते आणि संबंधित मूल्ये नियुक्त केली जातात. त्यानंतर, आम्ही या गुणधर्मांचा वापर करू शकतो, उदाहरणार्थ, त्यांची मूल्ये कन्सोलमध्ये प्रदर्शित करा:
Console.log(user.name); console.log(user.age);
ऑब्जेक्ट परिभाषित करताना आपण गुणधर्म देखील परिभाषित करू शकता:
Var वापरकर्ता = (नाव: "टॉम", वय: 26);
या प्रकरणात, मालमत्तेला मूल्य नियुक्त करण्यासाठी कोलन वर्ण वापरला जातो आणि गुणधर्म व्याख्येनंतर स्वल्पविराम (अर्धविराम ऐवजी) ठेवला जातो.
याव्यतिरिक्त, गुणधर्म परिभाषित करण्यासाठी एक शॉर्टकट मार्ग आहे:
वार नाव = "टॉम"; var वय = 34; var वापरकर्ता = (नाव, वय); console.log(user.name); // Tom console.log(user.age); // ३४
या प्रकरणात, व्हेरिएबल्सची नावे देखील ऑब्जेक्टच्या गुणधर्मांची नावे आहेत. आणि अशा प्रकारे आपण अधिक जटिल डिझाइन तयार करू शकता:
वार नाव = "टॉम"; var वय = 34; var वापरकर्ता = (नाव, वय); var शिक्षक = (वापरकर्ता, कोर्स: "जावास्क्रिप्ट"); console.log(teacher.user); // (नाव: "टॉम", वय: 34) console.log(teacher.course); // JavaScript
ऑब्जेक्टच्या पद्धती त्याचे वर्तन किंवा ती करत असलेल्या क्रिया परिभाषित करतात. पद्धती ही कार्ये आहेत. उदाहरणार्थ, एक पद्धत परिभाषित करूया जी एखाद्या व्यक्तीचे नाव आणि वय दर्शवेल:
वर वापरकर्ता = (); user.name = "टॉम"; user.age = 26; user.display = function())( console.log(user.name); console.log(user.age); ); // मेथड user.display();
फंक्शन्सप्रमाणे, पद्धती प्रथम परिभाषित केल्या जातात आणि नंतर कॉल केल्या जातात.
ऑब्जेक्ट परिभाषित करताना पद्धती देखील थेट परिभाषित केल्या जाऊ शकतात:
वर वापरकर्ता = ( नाव: "टॉम", वय: 26, प्रदर्शन: कार्य())( console.log(this.name); console.log(this.age); ));
गुणधर्मांप्रमाणे, कोलन वापरून पद्धतीला फंक्शन संदर्भ नियुक्त केला जातो.
ऑब्जेक्टमधील गुणधर्म किंवा ऑब्जेक्टच्या पद्धतींमध्ये प्रवेश करण्यासाठी, हा कीवर्ड वापरा. याचा अर्थ वर्तमान ऑब्जेक्टचा संदर्भ आहे.
कोलन आणि फंक्शन वगळून पद्धती परिभाषित करण्यासाठी तुम्ही शॉर्टहँड मार्ग देखील वापरू शकता:
Var वापरकर्ता = ( नाव: "टॉम", वय: 26, प्रदर्शन())( console.log(this.name, this.age); ), move(place)( console.log(this.name, "ला जातो " , ठिकाण); user.display(); // टॉम 26 user.move("दुकान"); // टॉम दुकानात जातो
ॲरे सिंटॅक्स वापरून गुणधर्म आणि पद्धती परिभाषित करण्याचा पर्यायी मार्ग देखील आहे:
वर वापरकर्ता = (); user["name"] = "टॉम"; वापरकर्ता["वय"] = २६; user["display"] = function())( console.log(user.name); console.log(user.age); ); // पद्धत वापरकर्त्याला कॉल करणे["डिस्प्ले"]();
प्रत्येक मालमत्तेचे किंवा पद्धतीचे नाव अवतरण चिन्ह आणि चौरस कंसात बंद केले आहे, त्यानंतर त्याला एक मूल्य देखील नियुक्त केले आहे. उदाहरणार्थ, वापरकर्ता["वय"] = २६ .
या गुणधर्म आणि पद्धतींमध्ये प्रवेश करताना, तुम्ही एकतर डॉट नोटेशन (user.name) वापरू शकता किंवा वापरू शकता: user["name"]
हे देखील लक्षात घेतले पाहिजे की ऑब्जेक्ट गुणधर्म आणि पद्धतींची नावे नेहमी स्ट्रिंग असतात. म्हणजेच, आपण ऑब्जेक्टची मागील व्याख्या याप्रमाणे पुन्हा लिहू शकतो:
Var user = ( "नाव": "टॉम", "वय": 26, "डिस्प्ले": फंक्शन())( console.log(user.name); console.log(user.age); )); // पद्धत कॉल user.display();
एकीकडे, दोन व्याख्यांमध्ये फरक नाही. दुसरीकडे, अशी प्रकरणे आहेत जिथे शीर्षक एका ओळीत संलग्न केल्याने मदत होऊ शकते. उदाहरणार्थ, जर मालमत्तेच्या नावामध्ये स्पेसने विभक्त केलेले दोन शब्द असतील:
Var user = ( नाव: "टॉम", वय: 26, "पूर्ण नाव": "टॉम जॉन्स", "डिस्प्ले माहिती": फंक्शन())( console.log(user.name); console.log(user.age) ); console.log(वापरकर्ता["पूर्ण नाव"]); वापरकर्ता["माहिती प्रदर्शित करा"]();
केवळ या प्रकरणात, अशा गुणधर्म आणि पद्धतींमध्ये प्रवेश करण्यासाठी, आपण ॲरे सिंटॅक्स वापरणे आवश्यक आहे.
वर आपण ऑब्जेक्टमध्ये नवीन गुणधर्म कसे जोडू शकतो ते पाहिले. तथापि, आम्ही डिलीट ऑपरेटर वापरून गुणधर्म आणि पद्धती देखील हटवू शकतो. आणि जोडण्याप्रमाणे, आपण गुणधर्म दोन प्रकारे काढू शकतो. पहिला मार्ग म्हणजे डॉट नोटेशन वापरणे:
ऑब्जेक्ट.प्रॉपर्टी हटवा
किंवा ॲरे सिंटॅक्स वापरा:
ऑब्जेक्ट हटवा["मालमत्ता"]
उदाहरणार्थ, मालमत्ता काढून टाकूया:
वर वापरकर्ता = (); user.name = "टॉम"; user.age = 26; user.display = function())( console.log(user.name); console.log(user.age); ); console.log(user.name); // टॉम user.name हटवा; // मालमत्ता हटवा // पर्यायी // वापरकर्ता हटवा["नाव"]; console.log(user.name); // अपरिभाषित
हटवल्यानंतर, मालमत्ता अपरिभाषित असेल, म्हणून जेव्हा तुम्ही त्यात प्रवेश करण्याचा प्रयत्न करता तेव्हा, प्रोग्राम अपरिभाषित मूल्य परत करेल.
वेब संसाधनाला भेट देणे म्हणजे ब्राउझरच्या ॲड्रेस बारमधील विशिष्ट URI. अभ्यागत पृष्ठाचा पत्ता निर्दिष्ट करतो आणि ब्राउझरद्वारे DOM ट्री - डॉक्युमेंट ऑब्जेक्ट मॉडेलमध्ये त्याचे विश्लेषण केले जाते. या पृष्ठावरील कोणतीही लिंक ब्राउझरला दुसरे पृष्ठ पार्स करण्यास आणि वस्तूंचे दुसरे झाड तयार करण्यास सांगते.
ब्राउझर अभ्यागताला वर्तमान सत्रात आधीपासून पाहिलेल्या पृष्ठांच्या साखळीद्वारे मागे किंवा पुढे जाण्याची परवानगी देतो.
खरं तर, वापरकर्त्याच्या कृती म्हणजे पृष्ठांना भेट देण्याच्या प्रक्रियेत तयार झालेल्या ऑब्जेक्ट्सच्या सिस्टममधील हालचाली. प्रत्येक पृष्ठ त्याचे स्वतःचे DOM ट्री आहे आणि त्याव्यतिरिक्त, JavaScript ऑब्जेक्ट्स भाषेच्या आणि वापरकर्त्याच्या वर्णनाच्या सिंटॅक्सचे ऑब्जेक्ट आहेत.
तीन मुख्य पर्याय आहेत जे वेब रिसोर्सचे पेज ऑब्जेक्ट्स बनवतात, दोन्ही DOM आणि JavaScript भाषेच्या स्तरावर, ज्याने व्हेरिएबल क्रिएशन कन्स्ट्रक्ट केले आणि डेव्हलपरने केलेल्या वर्णनावर आधारित:
सर्व तीन प्रक्रिया मूलभूतपणे भिन्न आहेत, परंतु पहिल्या दोन वैशिष्ट्यांमध्ये फरक करणे विशेषतः महत्वाचे आहे. अभ्यागताला पृष्ठ रीफ्रेश करण्यापासून रोखणे कठीण आहे - ही एक अपरिहार्य "वाईट" अभ्यागत सवय आहे जी विकसकाने लक्षात ठेवली पाहिजे.
पृष्ठावरील आणि त्यापुढील नेव्हिगेशन केवळ पृष्ठाच्या कार्यक्षमतेमध्ये असले पाहिजे आणि ब्राउझर इतिहासात आणि त्याच्या बटणांच्या कार्यांमध्ये नाही. अनेक साइट्स ही महत्त्वाची आवश्यकता घोषित करतात, परंतु अभ्यागत पारंपारिकपणे त्याचे उल्लंघन करतात.
वैयक्तिक घटक स्तरावर पृष्ठ रीलोड न करता बदलणे (उदाहरणार्थ, AJAX) डायनॅमिक पृष्ठांसाठी एक सामान्य उपाय आहे. नियमानुसार, हे पृष्ठ घटकांद्वारे नेव्हिगेट करण्यासाठी, त्याचे ऑब्जेक्ट बदलण्यासाठी आणि अभ्यागतांशी संवाद व्यवस्थापित करण्यासाठी वापरले जाते.
JavaScript ऑब्जेक्ट आधारित आहे. जवळजवळ सर्व भाषा चल वस्तू आहेत. विकासक विविध वाक्यरचना पर्याय वापरून स्वतःचे ऑब्जेक्ट वर्णन तयार करू शकतो.
"स्ट्रिंग", "संख्या", सत्य, असत्य, शून्य किंवा अपरिभाषित नसलेली कोणतीही गोष्ट एक वस्तू आहे. भाषेच्या वाक्यरचनेच्या चौकटीत, याकडे दुर्लक्ष केले जाऊ शकते, याचा अर्थ केवळ DOM घटक आणि JavaScript ऑब्जेक्टचे स्वतःचे वर्णन हे बहुतेक प्रकरणांमध्ये विकसकासाठी महत्त्वपूर्ण व्यावहारिक महत्त्व नसते.
उदाहरणार्थ, गणितीय कार्ये गणित ऑब्जेक्टद्वारे दर्शविली जातात. हे भाषेच्या संकल्पनेच्या चौकटीत सोयीचे आहे, परंतु विकासकासाठी हे गणितीय ऑपरेशन्सचे आवश्यक शस्त्रागार वापरण्यासाठी फक्त एक सोयीस्कर वाक्यरचना आहे.
DOM सह योग्यरित्या कार्य करणे आणि आपल्या स्वतःच्या वस्तूंचे अचूक वर्णन करणे महत्वाचे आहे. JavaScript ऑब्जेक्ट फंक्शनचे वाक्यरचना आणि त्यांच्या वापरासाठी अभिव्यक्ती आवश्यक अल्गोरिदमचे तर्क रेकॉर्ड करण्याचा एक प्रकार आहे.
सर्व JavaScript ऑब्जेक्ट या नियमावर आधारित आहेत: "property" = "value" आणि associative array च्या संकल्पनेवर. त्याच्या सर्वात सोप्या स्वरूपात, JavaScript ऑब्जेक्ट म्हणजे मालमत्ता = मूल्य जोड्यांचा संग्रह. तथापि, "मूल्य" नेहमी एक संख्या असू शकत नाही आणि मालमत्ता नेहमी कोट्सशिवाय लिहिली जात नाही.
तुम्ही मालमत्ता नामकरणाचा अतिवापर करू नये. आदर्शपणे, मालमत्तेच्या नावांमध्ये फक्त लॅटिन अक्षरे असतात, नामकरण व्हेरिएबल्सची आवश्यकता पूर्ण करतात आणि ते भाषेचे मुख्य (आरक्षित) शब्द नाहीत.
गुणधर्मांची क्रमवारी अपेक्षित नाही, परंतु सहयोगी ॲरे तयार करताना किंवा आरंभ करताना, त्याचे घटक कसे व्यवस्थित केले जातात हे जाणून घेणे अगदी स्वीकार्य आहे. या परिस्थितीत वापरण्याची शिफारस केलेली नाही, परंतु हे लक्षात ठेवणे शक्य आहे.
गुणधर्मांच्या ॲरेची सुरुवात करणे म्हणजे एकाच वेळी:
अनुप्रयोगाच्या विशिष्ट संदर्भात, आपण जावास्क्रिप्ट ऑब्जेक्टला सहयोगी ॲरे म्हणून विचारात घेऊ शकता आणि अल्गोरिदममध्ये ऑब्जेक्ट म्हणून दुसर्या ठिकाणी, त्यास आवश्यक पद्धती नियुक्त करू शकता, त्याच्या घटकांची मूल्ये बदलू शकता.
कारण गुणधर्मांची नावे आणि त्यांची मूल्ये तयार किंवा सुधारित करताना स्ट्रिंग फॉरमॅटमध्ये निर्दिष्ट करणे आवश्यक आहे, स्ट्रिंग नोटेशन आणि अवतरण चिन्ह वापरण्याची शिफारस केली जाते.
तुम्ही Object.keys कंस्ट्रक्शन वापरून ऑब्जेक्टच्या गुणधर्मांची व्हॅल्यू मिळवू आणि बदलू शकता: JavaScript सर्व ऑब्जेक्ट प्रॉपर्टीजची ॲरे तयार करते. जेव्हा ऑब्जेक्ट्स डायनॅमिकरित्या तयार केल्या जातात, तेव्हा हे बांधकाम अतिशय सोयीचे असते, कारण ते ऑब्जेक्टमध्ये उपस्थित असलेल्या सर्व गुणधर्मांची सूची स्वयंचलितपणे तयार करते.
या उदाहरणात, दोन ॲरेचे वर्णन वेगवेगळ्या प्रकारे केले आहे. अनुप्रयोगात, दोन्ही ॲरे समतुल्य आहेत, कारण त्यामध्ये समान नावाचे गुणधर्म आणि त्यांची मूल्ये आहेत. लूप दुसऱ्या ॲरेच्या सर्व गुणधर्मांद्वारे पुनरावृत्ती करतो आणि सर्व मूल्यांची स्ट्रिंग तयार करतो.
डॉट किंवा ब्रॅकेट नोटेशनमध्ये समान प्रभाव प्राप्त केला जाऊ शकतो:
दोन्ही बांधकाम वैध आहेत आणि इच्छित परिणाम देतात. वरील उदाहरणामध्ये, कर्ली ब्रेसेस "()" द्वारे ॲरे निर्दिष्ट करताना, गणनेच्या शेवटी "," चिन्हाच्या स्वरूपात त्रुटी येऊ शकते (उदाहरणार्थ लाल वर्तुळासह चिन्हांकित). ब्राउझर सामान्यतः गणनेतील अतिरिक्त वर्णांकडे दुर्लक्ष करतात, परंतु हे न करणे चांगले आहे.
ऑब्जेक्ट एक सहयोगी ॲरे असल्याने, ऑपरेशन JavaScript डिलीट ऑब्जेक्ट वर्तमान ऑब्जेक्टच्या स्तरावर अंमलात आणला जातो (जेव्हा वारसा मिळतो - हे महत्त्वाचे असते) आणि या ऑब्जेक्टच्या गुणधर्मांच्या संग्रहावर विचार केला जातो.
वरील उदाहरणाच्या संदर्भात, तुम्ही खालील बांधकामे वापरू शकता:
पहिले बांधकाम पहिल्या ऑब्जेक्टचे दुसरे घटक काढून टाकते, दुसरे बांधकाम दुसऱ्या ऑब्जेक्टचे पहिले घटक काढून टाकते. डिलीट ऑपरेटर प्रोटोटाइप गुणधर्मांवर काम करत नाही आणि मालमत्ता हटवता येत नसल्यास खोटे परत येते.
JavaScript ऑब्जेक्ट गुणधर्म आणि फंक्शन्स (पद्धती) चे सिंटॅक्स सिंटॅक्स आणि भाषेच्या सिमेंटिक्सच्या सामान्य नियमांसारखे आहे. खरं तर, उलट सत्य आहे.
ऑब्जेक्टचे गुणधर्म आणि पद्धती हे ऑब्जेक्ट-ओरिएंटेड JavaScript पॅराडाइमद्वारे माहिती आणि त्यासह अनुमत क्रियांचे वर्णन करण्याचा एक प्रकार आहे.
हे उदाहरण x3_Obj ऑब्जेक्टचे वर्णन करते ज्यात फक्त दोन गुणधर्म आहेत: आयटम आणि pos. नंतर hello() पद्धत फंक्शन म्हणून जोडली गेली. परिणामस्वरुप, JavaScript ऑब्जेक्ट व्हॅल्यूज हे वर्णन प्रॉपर्टी व्हॅल्यूजच्या संदर्भात रिझल्ट विंडोमध्ये दर्शविल्याप्रमाणे समजेल, म्हणजेच ते फंक्शन बॉडी (1) ला व्हॅल्यू म्हणून ठेवेल.
Hello() प्रॉपर्टीला थेट कॉल करताना, त्याचा अर्थ पद्धत (फंक्शन) म्हणून केला जातो आणि परिणाम (2) हा या पद्धतीच्या कोडची अंमलबजावणी आहे.
ऑब्जेक्टच्या प्रॉपर्टी स्पेसमध्ये नेव्हिगेट करण्यासाठी, डेव्हलपर हा कीवर्ड वापरू शकतो आणि त्याद्वारे त्यांची मूल्ये मिळविण्यासाठी किंवा बदलण्यासाठी वर्णन केलेल्या गुणधर्मांचा संदर्भ घेऊ शकतो.
केवळ कन्स्ट्रक्टर बॉडी असलेल्या ऑब्जेक्टचे वर्णन करण्याची ही सुरुवात आहे. हे उदाहरण कुकीजसह कार्य करण्यासाठी ऑब्जेक्टचे वर्णन करते. जेव्हा पृष्ठ खालील रचनाद्वारे लोड केले जाते तेव्हा ऑब्जेक्ट आरंभ केला जातो:
या उदाहरणात, cownerCode हा युनिक अभ्यागत कोड आहे. तो तेथे नसल्यास, oCookie ऑब्जेक्टच्या कन्स्ट्रक्टरमध्ये नवीन कोड तयार केला जाईल. या ऑब्जेक्टच्या विकसकाचा अभ्यागत अधिकृततेचा अर्थ काय आहे हे महत्त्वाचे नाही, ऑब्जेक्टच्या पद्धतींचे वर्णन करण्यासाठी येथे हा कीवर्ड कसा वापरला जातो आणि ऑब्जेक्टच्या इतर पद्धतींमधून त्यांना कसे बोलावले जाते हे महत्त्वाचे आहे:
हे कुकीच्या नावाने वाचण्याच्या आणि विशिष्ट नावाने कुकीचे मूल्य लिहिण्याच्या ऑब्जेक्टच्या पद्धतींचे वर्णन करते.
अशा प्रकारे त्यांचा वापर केला जातो, जर पहिल्या बांधकामाच्या परिणामी मूल्याचे प्रतिनिधित्व केले जात नाही, तर दुसरे बांधकाम ते स्थापित करते.
तुम्ही ऑब्जेक्ट्स आणि ब्राउझर वातावरणात चालणाऱ्या ऑब्जेक्ट-ओरिएंटेड भाषेच्या दृष्टिकोनावर चर्चा करू शकता, परंतु प्रत्यक्षात यासाठी सराव आवश्यक आहे, पृष्ठाच्या डीओएमची सेवा करणे, ऑब्जेक्ट्समध्ये फेरफार करण्यासाठी आणि नेव्हिगेट करण्यासाठी साधने प्रदान करणे जावास्क्रिप्ट हा एक मजबूत बिंदू आहे.
ऑब्जेक्ट ओरिएंटेड सराव मध्ये, काहीतरी वेगळे महत्वाचे आहे. जवळजवळ सर्व वेब संसाधनांवर कुकीजसह कार्य करणे हे अभ्यासक्रमासाठी समान आहे. हे ऑब्जेक्ट फॉरमॅटमध्ये लागू करणे ही एक चांगली कल्पना आहे. या संदर्भात, पृष्ठ उघडण्याच्या क्षणी ऑब्जेक्टची सुरुवात होते: पृष्ठ लोड केले जाते = कुकी ऑब्जेक्ट अस्तित्वात आहे आणि सर्वकाही वाचले गेले आहे, आणि जे नव्हते ते तयार केले आहे.
पृष्ठासह कार्य करताना, अभ्यागत काही क्रिया करतो आणि ब्राउझरने कुकीज बदलणे किंवा तयार करणे आवश्यक आहे. दोन ऑब्जेक्ट पद्धती (वर लेबल केलेल्या) आहेत ज्या हे करतात.
खरं तर, ब्राउझरने DOM तयार केल्यानंतर आणि JavaScript ऑब्जेक्ट सिस्टममध्ये नवीन कार्यक्षमता जोडल्यानंतर लगेच कुकी ऑब्जेक्ट दिसून येतो: कुकीज वाचणे आणि तयार करणे (सुधारित करणे).
हे साधे उदाहरण वास्तविक वस्तू तयार करण्याची प्रक्रिया मानली जाते ज्यांचे स्वतःचे गुणधर्म आणि कार्यक्षमता (पद्धती) असतात. प्रत्येक ऑब्जेक्ट स्वतःचे कार्य करते आणि सामान्य अल्गोरिदममध्ये भाग घेत नाही, इतर ऑब्जेक्ट्सचा डेटा किंवा सामान्य नेमस्पेस बदलत नाही.
या दृष्टिकोनासह, विकसक समस्येचे वर्णन करण्यासाठी आणि निराकरण करण्यासाठी पुरेशी अद्वितीय वस्तूंची प्रणाली तयार करण्याची खात्री देतो.
DOM आणि JavaScript च्या कार्याचा एक महत्त्वाचा घटक: ऑब्जेक्ट इव्हेंट "s - जो तुम्हाला त्याच्या हँडलरमधील इव्हेंटबद्दल माहिती मिळवू देतो. जवळजवळ प्रत्येक पृष्ठ घटकाला एक किंवा अधिक इव्हेंटसाठी स्वतःचा हँडलर नियुक्त केला जाऊ शकतो.
खरं तर, JavaScript डेव्हलपर कोडचा एक मोठा "तुकडा" तयार करत नाही, परंतु फंक्शन्स, ऑब्जेक्ट्स, डेटा स्ट्रक्चर्सचे अनेक वर्णन तयार करतो आणि विशिष्ट पृष्ठ घटकांना इव्हेंट हँडलर नियुक्त करतो.
ऑब्जेक्ट इव्हेंट म्हणजे हँडलरला कारणीभूत असलेल्या इव्हेंटबद्दलची माहिती आणि या इव्हेंटला पुरेसा प्रतिसाद देण्याची या हँडलरची क्षमता. प्रत्येक इव्हेंट केवळ त्याच्या नावात आणि घटनेच्या ठिकाणीच नाही तर इतर अनेक पॅरामीटर्समध्ये देखील भिन्न असतो.
विशेषतः, कीबोर्ड इव्हेंट्स हे पॅरामीटर्सचा एक संच आहेत, माउस इव्हेंट डेटाची पूर्णपणे भिन्न श्रेणी आहेत आणि AJAX द्वारे सर्व्हर प्रतिसाद पूर्णपणे विकसकाने स्वतः नियोजित केला आहे.
प्रत्येक विशिष्ट प्रकरणात, पृष्ठावर येऊ शकणाऱ्या इव्हेंटचे चित्र सक्षम हँडलरच्या श्रेणीमध्ये बदलले जाते, इव्हेंटच्या विशिष्ट संचावर प्रक्रिया करण्यासाठी प्रदान केलेल्या पर्यायांच्या बाहेर, पृष्ठ कोणतीही कारवाई करत नाही.
ब्राउझर URI ला “परिवर्तित” करतो, अभ्यागताने निर्दिष्ट केलेल्या वेब संसाधनाचा पत्ता, DOM ट्रीमध्ये - या वेब संसाधनाच्या पृष्ठावरील ऑब्जेक्ट्सची प्रणाली. जेव्हा एखादा अभ्यागत पृष्ठावरील दुव्यांचे अनुसरण करतो, तेव्हा ब्राउझर इतर पृष्ठांच्या संबंधित झाडांवर जातो.
ही परिस्थिती विकसकाला त्याच्या ऑब्जेक्ट्सची प्रणाली वेब संसाधनाचा पाया म्हणून तयार करण्यास अनुमती देते जी अभ्यागतांच्या वर्तनास पुरेसा प्रतिसाद देते. आपण सामान्य कार्यक्षमता वेगळे केल्यास, उदाहरणार्थ:
नंतर, एकदा तयार केल्यावर, इतर साइट्स विकसित करताना ऑब्जेक्ट सिस्टम वापरल्या जाऊ शकतात. ब्राउझर भाषा म्हणून JavaScript च्या नेहमीच्या वापरापेक्षा ऑब्जेक्ट दृष्टिकोनाचा हा एक महत्त्वपूर्ण फायदा आहे जो पृष्ठाचे कार्य आणि इव्हेंटला प्रतिसाद सुनिश्चित करतो.
ऑब्जेक्ट्स हे पूर्ण घटक आहेत जे स्वतंत्र फायली म्हणून स्वरूपित केले जाऊ शकतात आणि भविष्यात वापरले जाऊ शकतात. या दृष्टिकोनाचे वैशिष्ट्यपूर्ण वैशिष्ट्य म्हणजे फीडबॅकची शक्यता आहे, जेव्हा अद्ययावत, सुधारित ऑब्जेक्टचा वापर मागील विकासामध्ये केला जाऊ शकतो, साइटमध्ये बदल न करता त्याची कार्यक्षमता स्वयंचलितपणे अद्यतनित करते.