जावास्क्रिप्ट में (स्पष्ट से हटकर) किस 'परिभाषित' का उपयोग किया जाता है?


161

मैंने इस पर प्रलेखन के लिए उच्च और निम्न खोज की है, लेकिन मुझे अभी कुछ भी नहीं मिला है।

मैं अलोहा का उपयोग कर रहा हूं और अन्य प्लगइन कार्यक्षमता से जुड़ी अपनी खुद की एक नई साइड बार बनाने के लिए उनके साइडबार प्रोटोटाइप का उपयोग करना चाहता हूं।

उनका साइडबार.जेएस इस के साथ शुरू होता है, लेकिन मैं अपने जीवन के लिए कोई दस्तावेज नहीं ढूंढ सकता हूं जो यह बताता है कि इसका क्या मतलब है।

define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {

यह तब उस आवरण में कार्यों के एक समूह को परिभाषित करने के लिए जाता है, इसलिए varsऔर कुछproptotypes - जो मैं बस अपने सिर के चारों ओर प्राप्त कर सकता हूं ...

वह क्या कह रहा है या मुझे स्पष्टीकरण कहां मिल सकता है?


जवाबों:


173

मैं पूरी स्क्रिप्ट देखे बिना यकीन के लिए नहीं कह सकता, लेकिन यह defineफ़ंक्शन की आवश्यकता है , विशेष रूप से उस फ़ंक्शन के " निर्भरता के साथ परिभाषित " विशेष रूप से । इसका उपयोग "मॉड्यूल" को परिभाषित करने के लिए किया जाता है:

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

और "निर्भरता के साथ परिभाषित" defineरूप इस प्रकार है:

यदि मॉड्यूल में निर्भरताएं हैं, तो पहला तर्क निर्भरता नामों की एक सरणी होना चाहिए, और दूसरा तर्क परिभाषा फ़ंक्शन होना चाहिए। सभी निर्भरताएं लोड होने के बाद मॉड्यूल को परिभाषित करने के लिए फ़ंक्शन को बुलाया जाएगा। फ़ंक्शन को एक ऐसी वस्तु वापस करनी चाहिए जो मॉड्यूल को परिभाषित करती है।


1
हां, निश्चित रूप से यह-तो आवश्यकता के अपने हिस्से ।js और उस मार्कअप का उपयोग करने के लिए आपको आवश्यकता होती है jj.org।
डेविड ओ'सुल्लिवन

4
और IE के कौन से संस्करण इस का समर्थन नहीं करते ... ;-)
सिमोन_वेर

1
@Simon_Weaver - सुनिश्चित नहीं हैं कि आपका क्या मतलब है ... आवश्यकताएँ IE6 + द्वारा समर्थित है ।
जेम्स एलार्डिस

यह जानना अच्छा है :) मैं कुछ मुखर हो रहा था, लेकिन मैंने यह भी सोचा कि यह IE6 की तुलना में एक नया निर्माण था
सिमोन_विवर

1
@Simon_Weaver यह एक जावास्क्रिप्ट भाषा निर्माण नहीं है, यह एक सामान्य जावास्क्रिप्ट फ़ंक्शन है। वर्ग कोष्ठक एक सरणी बनाते हैं। या यह कि जिस निर्माण का आप जिक्र कर रहे थे?
रॉबिन ग्रीन

3

यह मॉड्यूल लिखने के लिए एएमडी पैटर्न है जो एएमडी एसिंक्रोनस मॉड्यूल परिभाषा के लिए खड़ा है, जब आपको मॉड्यूल को समान रूप से आयात करने की आवश्यकता होती है मूल रूप से आमजेएस की तरह कुछ के बजाय।

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

परिभाषित करना निर्भरता की एक सरणी लेता है और एक बार सभी गैर-अवरुद्ध तरीके से पृष्ठभूमि (async) में लोड होने के बाद, कॉलबैक को परिभाषित करते हैं जो बदले में तर्क स्वीकार करता है (इस मामले में निर्भरता)।

ध्यान देने वाली एक और बात यह है कि उन मॉड्यूलों में से प्रत्येक को "परिभाषित" कीवर्ड का उपयोग करके परिभाषित करने की भी आवश्यकता है। उदाहरण के लिए मॉड्यूल 1 को नीचे की तरह परिभाषित किया जाएगा:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

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

ध्यान रखें, एएमडी के अपने स्वयं के पतन हैं। आशा है कि यह किसी की मदद करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.