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

Javascript 我可以从导入的对象定义ES6静态方法吗?,javascript,ecmascript-next,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 = some

如果我定义某个类:

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的第2阶段建议。见下文@T.J.Crowder的答案。并且需要“babel-preset-stage-2”transpiler。

这不是一个静态方法,它是一个静态字段(它还不是标准字段;目前处于第2阶段,尽管传输语法很常见,因为它的基础似乎不太可能改变)

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


如果您想现在就执行此操作,而不需要传输或等待静态字段成为标准字段,只需在之后执行此分配:

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

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

这不是一个静态方法,而是一个静态字段(它还不是标准的;目前处于第2阶段,尽管传输语法是很常见的,因为它的基础似乎不太可能改变)

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


如果您想现在就执行此操作,而不需要传输或等待静态字段成为标准字段,只需在之后执行此分配:

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

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

这不是一个静态方法,而是一个静态字段(这还不是标准的)。您试图模拟但使用导入数据的原始代码甚至不起作用。@clockwork:为什么不起作用?(当然,如果他们在静态字段语法中使用transpiler,但在第一个代码块中也是如此……)是的,我们使用babel-preset-stage-2 transpiler“我没有单独尝试过”,这是我的怀疑。测试代码示例是询问之前的一个重要步骤。这决不是白费力气@克劳德:哈哈,是的,我知道。我只是有时候喜欢把一切都剪掉。:)这不是一个静态方法,而是一个静态字段(这还不是标准的)。您试图模拟但使用导入数据的原始代码甚至不起作用。@clockwork:为什么不起作用?(当然,如果他们在静态字段语法中使用transpiler,但在第一个代码块中也是如此……)是的,我们使用babel-preset-stage-2 transpiler“我没有单独尝试过”,这是我的怀疑。测试代码示例是询问之前的一个重要步骤。这决不是白费力气@克劳德:哈哈,是的,我知道。我只是有时候喜欢把一切都剪掉。:)感谢您参考静态字段建议。当我最初写这个问题时,我把它命名为“我可以从导入的变量(或方法)定义ES6静态变量(或方法)吗?”,但由于找不到任何关于静态变量的内容,所以进行了修改。@Drew2:不用担心。不知道为什么这个问题会被否决,这些东西是新的,它们的组合方式并不总是显而易见的…:-)静态字段赋值的顺序是什么?当类初始化为“new”时,静态赋值已经发生了,对吗?导入发生在定义类构造函数之前?@Drew2:导入发生在加载模块时,并在处理
class
声明之前解析。静态字段初始值设定项是在处理
声明时执行的(按照相对于其他声明的源代码顺序,如果有的话),根据定义,在调用构造函数之前也是如此。在答案末尾的解决方法中,由于我们在类声明之后第一件事就是这样做,因此同样没有调用构造函数的机会。(在初始化者看到的范围方面存在差异,但您无需担心。)感谢您参考静态字段建议。当我最初写这个问题时,我把它命名为“我可以从导入的变量(或方法)定义ES6静态变量(或方法)吗?”,但由于找不到任何关于静态变量的内容,所以进行了修改。@Drew2:不用担心。不知道为什么这个问题会被否决,这些东西是新的,它们的组合方式并不总是显而易见的…:-)静态字段赋值的顺序是什么?当类初始化为“new”时,静态赋值已经发生了,对吗?导入发生在定义类构造函数之前?@Drew2:导入发生在加载模块时,并在处理
class
声明之前解析。静态字段初始值设定项是在处理
声明时执行的(按照相对于其他声明的源代码顺序,如果有的话),根据定义,在调用构造函数之前也是如此。在答案末尾的解决方法中,由于我们在类声明之后第一件事就是这样做,因此同样没有调用构造函数的机会。(初始值设定项看到的范围不同,但无需担心。)