为什么 es6 不允许这样做?我知道该消息仅在警报模块中定义,并且在基本模块中未定义,但我(显然错误地)想象,由于警报类可以访问它,所以所有类都应该......想法?
//file component.js
import Base from './base';
const message = "hello";
class Alert extends Base {
initialize() {
this.render();
}
}
export default Alert;
和
//file base.js
class Base {
render() {
alert(message);
}
}
export default Base;
最佳答案
Base
类及其方法无权访问 component
模块中的任何变量,该模块有自己的作用域。如果导入模块,它可以访问导出的值,但不能访问本地 message
变量。
我认为您需要在此处使用该类的静态属性,在 Alert
实例上调用时,Base
方法可以访问这些静态属性:
import Base from './base';
export default class Alert extends Base {
initialize() {
this.render();
}
}
Alert.message = "hello"; // not constant, though; you'd need to use
// Object.defineProperty(Alert, "message", {value: …} for that
export default class Base {
render() {
alert(this.constructor.message);
}
}
Base.message = "";
另请参阅 es6 call static methods了解 this.constructor....
的工作原理。
关于javascript - 具有扩展类和模块的 es6 变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202865/