2016-04-19 10 views
13

के एक उदाहरण के साथ शुरू करते हैं:ऑब्जेक्ट में आयात करें?

import renewCreepLife from '../tasks/renew_creep_life'; 
import harvestEnergy from '../tasks/harvest_energy'; 
import pickupEnergy from '../tasks/pickup_energy'; 
import storeEnergy from '../tasks/store_energy'; 
import upgradeController from '../tasks/upgrade_controller'; 

const taskFuncs = { 
    [Tasks.RENEW]: renewCreepLife, 
    [Tasks.PICKUP_ENERGY]: pickupEnergy, 
    [Tasks.HARVESTING]: harvestEnergy, 
    [Tasks.STORING]: storeEnergy, 
    [Tasks.UPGRADING]: upgradeController, 
}; 

वहाँ इतना है कि मैं इन व्यर्थ अस्थायी चर नाम बनाने नहीं कर रहा हूँ इस सरल करने के लिए कोई तरीका है? कुछ ऐसा:

// incorrect but desired syntax 
const taskFuncs = { 
    [Tasks.RENEW]: import '../tasks/renew_creep_life', 
}; 

एनबी। उनमें से प्रत्येक फाइल export default function()

+2

नहीं ES6 है, लेकिन जब से तुम शायद webpack या browserify की तरह कुछ का उपयोग कर रहे हैं, तो आप 'require' है, जो ठीक यही करने की क्षमता देता है का उपयोग कर सकते हैं। –

+0

संभव डुप्लिकेट [ES6 मॉड्यूल सिंटैक्स (विनाशकारी) का उपयोग कर गुणों में आयात कैसे करें?] (Http://stackoverflow.com/q/32124640/1048572) – Bergi

उत्तर

7

सं। import कथन का रिटर्न वैल्यू नहीं है, इसलिए इसे कभी भी इस तरह के चर के लिए असाइन करने के लिए उपयोग नहीं किया जा सकता है।

इसके अतिरिक्त, import और export शीर्ष स्तर पर घोषित किया जाना चाहिए।

ईएस 6 के साथ यह संभव नहीं है और संभवतः निकट भविष्य (ES2016 +) के लिए इस तरह से रहेगा।

हालांकि, वहाँ है एक HTML Module Loader spec काम किया जा रहा है जिस पर आप की तरह मॉड्यूल लोड करने के लिए अनुमति देगा:

System.import('../tasks/renew_creep_life') 
.then(renewCreepLife => { 

}); 

लेकिन बाद से यह वादा आधारित है, तो आप अभी भी बस इसे इनलाइन लिखने के लिए एक में सक्षम नहीं हो जाएगा उस तरह की वस्तु।

यदि आप सिंक्रोनस लोडिंग चाहते हैं, तो नोडजेएस 'require शायद सबसे नज़दीक है जो आपको मिलेगा। वेबपैक/ब्राउज़र/इत्यादि जैसे ब्राउज़र कार्यान्वयन हैं। व्यवहार की नकल करने का प्रयास जो:

const taskFuncs = { 
    [Tasks.RENEW]: require('../tasks/renew_creep_life').default 
}; 
+1

बीटीडब्ल्यू, मेरी राय में आपका मूल समाधान स्पष्ट, स्पष्ट, संक्षिप्त और संक्षिप्त है अधिक महत्वपूर्ण रूप से सांख्यिकीय रूप से विश्लेषण योग्य। मैं व्यक्तिगत रूप से आपके पास रखता हूं। – CodingIntrigue

+0

इसे 'आवश्यकता (' ../ कार्यों/renew_creep_life ') होना चाहिए। डिफ़ॉल्ट' फिर, नहीं? – mpen

+1

@mpen सही कॉमनजेएस हां में, आप सही हैं (कुछ ब्राउज़र कार्यान्वयन 100% अनुरूप नहीं हैं - उदाहरण के लिए बेबेल 5) - मैं अपडेट करूंगा – CodingIntrigue

संबंधित मुद्दे