导入函数中this
的值是什么,从命名空间导入调用? (根据ECMA规范)
// 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?
我的猜测是:它是module
对象,但未在规范中找到明确答案。这里是否适用正常行为,或者ES6模块中是否存在名称空间导入的特殊内容?
答案 0 :(得分:3)
不,这里没有特别的行为。 Module namespaces可能是外来对象,它将所有访问委托给某些内部,并且几乎是不可变的,但它们仍然只是对象。对它们的方法调用与任何其他对象的工作方式不同。
答案 1 :(得分:2)
根据我对规范的阅读,它将是模块名称空间异域对象(您在示例中绑定了名称module
)。换句话说,出口袋。因此,在您的示例中,我相信您可以在下一个声明中致电x.fun()
。
据我所知......
模块名称空间对象将被设置为评估12.3.2.1 Runtime Semantics: Evaluation中的MemberExpression
所返回的引用的基值
this
值只会在12.3.4.1 Runtime Semantics: Evaluation算法的步骤5.a.i中照常设置。