javascript - 具有扩展类和模块的 es6 变量作用域

标签 javascript class ecmascript-6 node-modules

为什么 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/

相关文章:

javascript - 通过软件包安装程序安装时,Knockout 未定义

javascript - 根据输入类型日期 html 在 javascript 中计算 2 个日期之间的时间

javascript - 执行动画时无效 prop 'paddingLeft'

javascript - AngularJS - 图像不在 ng-template 中呈现

c++ - C++中的类存储保证

c++ - 为什么这会给我错误 C2661 :no overloaded function takes 2 arguments?

c++ - 如何从C++中的嵌套类调用变量

angularjs - 如何在 Sinon JS 的单元测试中处理 sinon.stub().throws()

javascript - 类型错误 - 不是构造函数

javascript - 递归函数,维护全局计数器而不使用全局变量