2016-12-14 105 views
1

我注意到ES6拆解進口可以實現類似下面的方式,可以在es6語法中使用深度解構導入嗎?

foo.js

export default() => { 
    return { 
    a: 'b' 
    } 
} 

index.js

import foo from './foo'; 
export default foo; 
export const bar = foo(); 

,所以我可以用模塊,

import foo, { bar, } from 'my-module';

,但我怎麼能使用深拆解進口從我的模塊,我總是按以下方式失敗,

import foo, { bar: { a } } from 'my-module';

它看起來像ES6已經實現了上面的語法,而是如何使用它..

感謝您的時間,

關於。

+0

你不能。導入使用的語法與解構非常相似,但不完全相同。請參閱本文[ES6 JavaScript深層解構](https://ponyfoo.com/articles/es6-destructuring-in-depth)(特殊情況:最後導入)。 –

+0

@OriDrori謝謝,我得到我的錯誤.. –

+0

即使你*可*,你可能不應該。這將違反[Demeter法](https://en.wikipedia.org/wiki/Law_of_Demeter)。 –

回答

2

ImportClauseimport與解構不一樣。它們確實具有一些語法相似性,但是如果通讀the spec on import,則可以看到它從不涉及通常的解構結構,如DestructuringAssignmentTargetBindingPattern

記住,進口創建模塊之間的綁定,但解構賦值從源複製到目標。如果在源模塊中bar的值發生變化,那麼您是否會改變導入的a? (畢竟,import { bar } from 'my-module';,如果bar更改爲my-module,則導入的bar反映了此更改。)或者在某些時間點,解構導入將bar.a的值複製到a?如果是這樣,什麼時候點?

你明白了。他們只是不同的野獸。

當然,你可以導入和然後解構的:

import foo, { bar } from 'my-module'; 
let { a } = bar; 

...但我敢肯定,你知道的。 :-)

+0

感謝您的回覆:) –