我可以从导入的对象中定义ES6静态方法吗?

时间:2018-02-12 15:41:43

标签: javascript ecmascript-next

如果我定义了一些类:

class MyClass {
  static  myVar = { someKey: someVal };
...
}

但是我没有在类中定义静态变量,而是想从另一个文件中导入它:

// utils.js
export const someObject = { someKey: someVal };
...

这会有效吗?:

import { someObject } from './utils.js';

class MyClass {
  static  myVar = someObject;
...
}

编辑:此问题的标题更准确地是:"我可以从导入的对象定义ES6静态字段吗?"静态字段目前是JS的第二阶段提案。请参阅下面的@ T.J.Crowder的答案。并要求" babel-preset-stage-2" transpiler。

1 个答案:

答案 0 :(得分:3)

这不是一个静态方法,它是一个静态字段(它还不是标准的; static fields目前处于第2阶段,尽管将语法转换为基础知识似乎不太可能改变。)

但是,当静态字段 标准化时,语义就像它们目前所处的那样(如果它们不是那样会很奇怪),是的,你可以这样做。字段的初始值设定项可以是任何表达式,包括使用导入绑定的表达式。

如果您想立即执行此操作,无需转换或等待静态字段成为标准,请稍后执行分配:

import { someObject } from './utils.js';

class MyClass {
  // ...
}
MyClass.myVar = someObject;