Javascript 具有扩展类和模块的es6变量范围
为什么es6不允许这样做?我知道消息只在警报模块中定义,而在基本模块中没有定义,但我(显然是错误地)认为,既然警报类可以访问它,所有类都应该。。。想法Javascript 具有扩展类和模块的es6变量范围,javascript,class,ecmascript-6,node-modules,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 component.js
import Base from './base';
const message = "hello";
class Alert extends Base {
initialize() {
this.render();
}
}
export default Alert;
及
这不起作用,因为JavaScript没有动态作用域 词法范围意味着变量是否可访问取决于它们在源文本中出现的位置,而不取决于运行时信息 简化示例:
function foo() {
var bar = 42;
baz();
}
function baz() {
console.log(bar); // error because bar is not in the scope of baz
}
注意:这对于类或ES6来说并不新鲜,一直都是这样。这不起作用,因为JavaScript没有动态作用域 词法范围意味着变量是否可访问取决于它们在源文本中出现的位置,而不取决于运行时信息 简化示例:
function foo() {
var bar = 42;
baz();
}
function baz() {
console.log(bar); // error because bar is not in the scope of baz
}
注意:这对于类或ES6来说并不新鲜,一直都是这样。基本类及其方法无法访问
组件
模块中的任何变量,该模块有自己的作用域。如果要导入模块,则可以访问导出的值,但不能访问本地消息
变量
我认为您应该在这里使用类的静态属性,当在警报
实例上调用时,基
方法可以访问该类:
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
另请参见
this.constructor….
的工作原理。基本类及其方法无法访问组件模块中的任何变量,该模块有自己的作用域。如果要导入模块,则可以访问导出的值,但不能访问本地消息
变量
我认为您应该在这里使用类的静态属性,当在警报
实例上调用时,基
方法可以访问该类:
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
另请参见this.constructor….
的工作原理。这正是我想要的。谢谢这正是我想要的。谢谢谢谢你的回答!我并不是很关心解决问题,而是理解问题的局限性。是的,我只是不想重复费利克斯已经写过的内容:-)谢谢你的回答!我不太关心解决问题的方法,而是理解其局限性。是的,我只是不想重复费利克斯已经写过的内容:-)