Powiedzmy mamy cztery moduły, A
, B
, C
i D
W składni "import" ES6, w jaki sposób moduł jest dokładnie oceniany?
W module A
:
console.log("A evaluated")
function AClass {
console.log("A constructor")
}
var aObj = new AClass()
export default aObj;
w module B
:
import aObj from A
export default "B"
w module C
:
import aObj from A
export default "C"
W module D
:
import b from B
import c from C
import aObj from A
Więc kiedy moduł D
ocenia, ile razy będzie A evaluated
i A constructor
być drukowane w konsoli?
Czy to zachowanie opisane jest w standardzie ES6? Co powinienem zrobić, jeśli chcę, aby moduł był oceniany TYLKO RAZ, bez względu na to, ile razy jest importowany bezpośrednio lub pośrednio? Czy ktoś ma jakieś pomysły na ten temat?
Po prostu mówiąc, nie powinieneś eksportować instancji, zawsze powinieneś wyeksportować klasę - lub jeśli potrzebujesz tylko obiektów, nie powinieneś używać klas. – Bergi
@Bergi Dzięki, ale co powinienem zrobić, gdy potrzebuję zewnętrznej globalnej instancji singleton w różnych modułach ... Możliwe, że eksportowanie wystąpień jest jedyną metodą. –
Możesz używać prostych literałów obiektowych do tworzenia singletonów. Nie ma potrzeby używania 'class'es. – Bergi