दिलचस्प पोस्ट
पासपोर्ट को समझना desialialize serialize जावास्क्रिप्ट का उपयोग कर क्लाइंट साइड टेक्स्ट फाइल पढ़ना Android 4.2 पर प्रोग्राम को फ़्लाइट मोड को सक्षम और अक्षम कैसे करें? IntelliJ IDEA में मेवेन निर्भरताओं को आयात करें गैर-जेएसएफ घटकों की सशर्त रेंडरिंग (सादे वेनिला एचटीएमएल और टेम्पलेट पाठ) रूबी में @@ चर का क्या अर्थ है? विभिन्न पृष्ठ से आईडी पर jQuery स्क्रॉल करें क्या कोई इस टेम्पलेट कोड को समझा सकता है जो मुझे सरणी का आकार देता है? एक Grep RegEx से समूह कैप्चर करना एआरसी में चक्र बनाए रखें मौजूदा एएसआईएन के साथ आइटम के लिए सही अमेज़ॅन मेगावाट का प्रवाह सिस्टम। थ्रेडिंग। टास्क – समवर्ती कार्य की संख्या को सीमित करें C # कंसोल अनुप्रयोगों को स्वचालित रूप से बंद करने से कैसे रोकें? सरणी के लिए JSON स्ट्रिंग कन्वर्ट करने के लिए मैं Bootstrap में ScrollSpy के लिए ऑफसेट कैसे सेट करूं?

क्या जावास्क्रिप्ट फ़ंक्शन एक्सप्रेशन के बारे में सोचने का अधिकार है जो 'नया' कीवर्ड को 'स्थिर' के रूप में प्रयोग करता है

मैं बस थोड़ा सा गहरा जावास्क्रिप्ट समझने की कोशिश कर रहा हूँ

मैंने एक 'वर्ग' gameData बनाया है जो कि मैं केवल एक को चाहता हूं, किसी निर्माता की जरूरत नहीं है, या तत्काल।

तो मैंने इसे इतना बनाया …

 var gameData = new function () { //May need this later this.init = function () { }; this.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; } 

एहसास है कि 'नया' कीवर्ड इसे तत्काल करने की अनुमति नहीं देता है और इसे उपलब्ध कराता है जैसे एक स्थिर वर्ग सी # में होगा।

क्या मैं इसे सही ढंग से सोच रहा हूं? स्थिर के रूप में?

वेब के समाधान से एकत्रित समाधान "क्या जावास्क्रिप्ट फ़ंक्शन एक्सप्रेशन के बारे में सोचने का अधिकार है जो 'नया' कीवर्ड को 'स्थिर' के रूप में प्रयोग करता है"

नहीं, यह स्थिर नहीं है क्योंकि यह अभी भी आपके "अनाम" फ़ंक्शन के लिए इंगित constructor संपत्ति है। आपके उदाहरण में, आप उपयोग कर सकते हैं

 var gameData2 = new (gameData.constructor)(); 

एक दूसरे ऑब्जेक्ट को पुनः स्थापित करने के लिए, इसलिए "क्लास" (वास्तव में वास्तव में) वास्तव में "स्थिर" नहीं है आप मूल रूप से निर्माता को लीक कर रहे हैं, और संभवत: उस डेटा से जुड़ा हुआ डेटा। इसके अलावा, एक बेकार प्रोटोटाइप ऑब्जेक्ट ( gameData.constructor.prototype ) बनाया जाता है और gameData के प्रोटोटाइप श्रृंखला में डाला जाता है, जो कि आप क्या नहीं चाहते हैं।

इसके बजाय, आप उपयोग कर सकते हैं

  • एक एकल, सरल ऑब्जेक्ट आभासी ( डेफ के जवाब में ) इसका अर्थ है कि आपके पास कोई कन्स्ट्रक्टर नहीं है, कोई क्लोजर-स्कॉक्ड निजी वेरिएबल्स नहीं है (आपने किसी को भी उपयोग नहीं किया है) और नहीं (कस्टम) प्रोटोटाइप
  • (खुलासा) मॉड्यूल पैटर्न ( जे एंड के जवाब में )। वहां आपके पास आईआईएफई को क्लोजर- स्कॉप्ड वैरिएबल बनाने के लिए होगा, और किसी भी ऑब्जेक्ट को वापस कर सकते हैं।
  • एक वास्तविक कन्स्ट्रक्टर ("क्लास") जिसे बाद में तत्काल किया जा सकता है (जब आवश्यक हो), और एक ही सिंगलटन ऑब्जेक्ट को हमेशा पैदा करता है

सिंगलटन पैटर्न यही होता है:

 function GameData() { if (this.constructor.singleton) return this.constructor.singleton; else this.constructor.singleton = this; // init: // * private vars // * public properties // ... } GameData.prototype.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; var gameData = new GameData(); var gameData2 = new GameData(); gameData === gameData2 === GameData.singleton; // true 

फिर भी, प्रोटोटाइप काफी बेकार है क्योंकि आपके पास GameData का केवल एक उदाहरण है। यह विरासत के साथ ही दिलचस्प होगा

ईसीएमएसक्रिप्ट में कोई वर्ग नहीं है, केवल ऑब्जेक्ट है

जब किसी फ़ंक्शन का उपयोग करने के लिए new उपयोग किया जाता है, तो हम इसे कन्स्ट्रक्टर फ़ंक्शन कहते हैं । यह फ़ंक्शन कुछ हद तक ऑटो एक बार फिर एक नया ऑब्जेक्ट देता है किसी भी डेटा को उस ऑब्जेक्ट के भीतर संग्रहीत किया जाता है जिसका उपयोग this (जो संदर्भ जो नव निर्मित ऑब्जेक्ट है) उस ऑब्जेक्ट की संपत्ति के रूप में वापस किया जाता है। इसके अलावा, new सेट के लिए कंसट्रक्टर नामक एक संपत्ति सेट करता है।

आपके मामले में, आप वास्तव में new के उपयोग की आवश्यकता नहीं है, आप आसानी से अपना कोड निम्न प्रकार से लिख सकते हैं:

 var gameData = (function () { var public = { }, private = { }; // any private data can get stored here //May need this later public.init = function () { }; public.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; return public; }()); 

इसे कारखाना पैटर्न , सिंगलटन पैटर्न , मॉड्यूल पैटर्न कहा जाता है, और कुछ अन्य नाम भी हो सकते हैं।

मुझे लगता है कि आप जो देख रहे हैं वह सिर्फ एक साधारण जावास्क्रिप्ट ऑब्जेक्ट है:

 var gameData = { //May need this later init : function () { }, storageAvailable : function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } } } 

यदि आप निजी चर का उपयोग करना चाहते हैं तो एक खुलासा मॉड्यूल पैटर्न शैली आवरण बनाएँ मूल रूप से यह जम्मू ने सुझाव दिया है:

 var gameData = (function() { var private = 'private variable'; return { //May need this later init : function () { }, storageAvailable : function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } } } })();