var FOO = FOO || {};कवर करने वाले दो मुख्य भाग हैं।
# 1 ओवरराइडिंग को रोकना
कल्पना करें कि आपके पास कई फाइलों पर आपका कोड विभाजित है और आपके सहकर्मी भी नामक ऑब्जेक्ट पर काम कर रहे हैं FOO। तब यह इस मामले को जन्म दे सकता है कि किसी ने पहले से ही FOOइसे परिभाषित किया है और इसे (एक skateboardफ़ंक्शन की तरह ) कार्यक्षमता प्रदान की है। तब आप इसे ओवरराइड करेंगे, यदि आप जाँच नहीं कर रहे थे कि क्या यह पहले से मौजूद है।
समस्यात्मक मामला:
// Definition of co-worker "Bart" in "bart.js"
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker "Homer" in "homer.js"
var FOO = {};
FOO.donut = function() {
alert('I like donuts!');
};
skateboardयदि आप अपने HTML में जावास्क्रिप्ट फ़ाइल homer.jsको लोड करते हैं तो इस स्थिति में फ़ंक्शन चला जाएगा bart.jsक्योंकि होमर एक नई FOOवस्तु को परिभाषित करता है (और इस प्रकार बार्ट से मौजूदा को ओवरराइड करता है) इसलिए यह केवल donutफ़ंक्शन के बारे में जानता है ।
इसलिए आपको var FOO = FOO || {};इसका उपयोग करने की आवश्यकता है जिसका अर्थ है "FOO को FOO को सौंपा जाएगा (यदि यह पहले से मौजूद है) या एक नई रिक्त वस्तु (यदि FOO पहले से मौजूद नहीं है)।
उपाय:
var FOO = FOO || {};
// Definition of co-worker Bart in bart.js
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker Homer in homer.js
var FOO = FOO || {};
FOO.donut = function() {
alert('I like donuts!');
};
क्योंकि बार्ट और होमर अब FOOअपने तरीकों को परिभाषित करने से पहले अपने अस्तित्व की जाँच कर रहे हैं , आप एक-दूसरे के तरीकों (यदि उनके अलग-अलग नाम हैं) को ओवरराइड किए बिना लोड कर सकते हैं bart.jsऔर कर सकते हैं homer.js। तो आपको हमेशा एक FOOवस्तु मिलेगी जिसमें विधियाँ हैं skateboardऔर donut(याय!)।
# 2 एक नई वस्तु को परिभाषित करना
यदि आपने पहले उदाहरण के माध्यम से पढ़ा है तो आप पहले से ही अब इसका उद्देश्य क्या है || {}।
क्योंकि यदि कोई विद्यमान FOOवस्तु नहीं है, तो OR-case सक्रिय हो जाएगा और एक नई वस्तु बनाता है, इसलिए आप इसे कार्य सौंप सकते हैं। पसंद:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};