2016-04-19 20 views
13

Hãy bắt đầu với một ví dụ:Nhập vào đối tượng?

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, 
}; 

Có cách nào để đơn giản hóa này vì vậy mà tôi không tạo ra những tên biến tạm thời vô nghĩa? Một cái gì đó như:

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

N.B. mỗi tệp đó đang sử dụng export default function()

+2

Không ES6, nhưng vì có lẽ bạn đang sử dụng một cái gì đó giống như webpack hoặc browserify, bạn có thể sử dụng 'require', mang đến cho bạn khả năng làm việc đó. –

+0

có thể trùng lặp của [Làm cách nào để nhập vào các thuộc tính sử dụng cú pháp mô-đun ES6 (destructing)?] (Http://stackoverflow.com/q/32124640/1048572) – Bergi

Trả lời

7

No.

Ngoài ra, importexport phải được khai báo ở cấp cao nhất.

Điều này là không thể với ES6 và có khả năng sẽ ở lại như vậy trong tương lai gần (ES2016 +).

Tuy nhiên, có một HTML Module Loader spec được làm việc trên đó sẽ cho phép bạn tải các module như:

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

}); 

Nhưng vì nó hứa hẹn dựa trên, bạn sẽ vẫn không thể chỉ viết nó nội tuyến trong một đối tượng như thế.

Nếu bạn muốn tải đồng bộ, NodeJS 'require có lẽ là gần nhất bạn sẽ nhận được. Có các triển khai trình duyệt như Webpack/Browserify/etc. mà cố gắng bắt chước các hành vi:

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

Btw, theo ý kiến ​​của tôi, giải pháp ban đầu của bạn rõ ràng, rõ ràng, súc tích và quan trọng hơn là phân tích tĩnh. Cá nhân tôi sẽ giữ những gì bạn có. – CodingIntrigue

+0

Nó sẽ phải là 'require ('../ tasks/renew_creep_life'). Mặc định' sau đó, không? – mpen

+1

@mpen Trong CommonJS đúng, bạn nói đúng (một số triển khai trình duyệt không tuân thủ 100% - ví dụ Babel 5) - Tôi sẽ cập nhật – CodingIntrigue

Các vấn đề liên quan