2016-05-06 20 views
5

Qual è il valore di this in una funzione importata, che viene chiamata da uno spazio dei nomi ? (Secondo le specifiche ECMA)Importazione spazio dei nomi ES6: comportamento di "questo"

// module.js 
export function fun() { 
    return this; 
} 

// main.js 
import * as module from "./module.js"; 

let x = module.fun(); // What's the value of x here? 

La mia ipotesi è: E 'l'oggetto module, ma non ho trovato una risposta chiara a questa nelle specifiche. Il comportamento normale si applica qui o c'è qualcosa di speciale nei moduli ES6 per le importazioni dello spazio dei nomi?

+0

In Babel restituisce effettivamente l'oggetto 'module', tuttavia non so cosa dice la specifica a riguardo. –

+0

Ricorda che 'this' è una proprietà del contesto di esecuzione e non dell'oggetto stesso. – Kashif

risposta

2

Sulla base della mia lettura dello specifico sarebbe l'oggetto esotico del namespace del modulo (che hai associato al nome module nell'esempio). In altre parole, la borsa delle esportazioni. Quindi nel tuo esempio credo che potresti chiamare x.fun() nella prossima dichiarazione.

Per quanto posso vedere ...

3

No, non c'è un comportamento speciale qui. Module namespaces possono essere oggetti esotici che delegano tutti gli accessi ad alcuni interni e che sono praticamente immutabili, ma sono ancora solo oggetti. Le invocazioni dei metodi su di esse non funzionano in modo diverso rispetto a qualsiasi altro oggetto.