在JavaScript类中正确声明静态变量

在JavaScript类中正确声明静态变量,javascript,class,Javascript,Class,在我的代码中,我执行以下操作(非常简化): 类地址选择地址{ 静态体;//{ this.body=document.createElement('div'); this.body.innerHTML=结果; }); // ... } 静态someOtherMethod(){ //用身体做点什么 } } 我的代码在Chrome中运行良好。不过,Firefox抱怨第二行代码有错误: SyntaxError:错误的方法定义 我对基于类的JavaScript编程比较陌生。我做错了什么 这对我没什么帮助

在我的代码中,我执行以下操作(非常简化):

类地址选择地址{
静态体;//{
this.body=document.createElement('div');
this.body.innerHTML=结果;
});
// ...
}
静态someOtherMethod(){
//用身体做点什么
}
}
我的代码在Chrome中运行良好。不过,Firefox抱怨第二行代码有错误:

SyntaxError:错误的方法定义

我对基于类的JavaScript编程比较陌生。我做错了什么


这对我没什么帮助,因为它主要使用旧语法。

静态方法非常好用。不过,静态属性是最近添加的一种功能,目前还不能在所有浏览器中使用。它在Chrome中工作,但正如你所说的,在firefox中不工作。请看这篇文章,因为它支持我的答案:。要解决问题,可以在静态方法中声明变量

是第3阶段的提案,这意味着它们还不是JavaScript语言的正式部分。(第4阶段是最后阶段。)您可以阅读更多关于提案和提案流程的信息

目前,Chrome(从72版开始)是唯一一款支持静态类字段的浏览器

要在其他浏览器中使用此功能,您需要使用来传输代码。但是,如果您还没有使用Babel,这可能有点过头了

或者,可以在初始化类后将属性指定给该类。这在语义上并不完全相同,但适用于您(事实上,大多数)的用例

类地址选择地址{
// ...
}
AddOrSelectAddress.body='一些初始值';
您可以在下面的代码段中看到这一点

类地址选择地址{
静态变更体(val){
this.body=val;
}
静态方法(){
log('in someMethod body is',this.body);
}
静态someOtherMethod(){
log('in someOtherMethod body is',this.body);
}
}
AddOrSelectAddress.body='一些初始值';
AddOrSelectAddress.someMethod();
AddOrSelectAddress.changeBody(“其他值”);

AddOrSelectAddress.someOtherMethod()
@Kevin.a
static
关键字在JS中有效。可能是@Kevin.a的重复。我将自己定位在这个定义上:参见MDN中的static:。请注意,这是针对静态方法的,而不是针对成员。我不确定是否允许未定义静态变量。。。这难道没有挫败将其定义为未定义的意义吗?你不能把它作为类的一个属性吗?如中所示,将其放在构造函数中,只是在实例化类时不声明它?您知道解决方法吗?试想一下,我的
someOtherMethod()
方法也需要访问
body
。如何在静态方法中声明类全局变量?只需定义它,比如
this.stuff=null?@AndréReichert很遗憾,我没有解决这个问题的办法,但看看Jordan的答案,他似乎对这个问题有更多的了解matter@Andr雷切尔也许值得一看,这似乎有点骇人,但至少,它是有效的。谢谢。@AndréReichert做了什么,特别是对静态字段的工作?上面的代码基本上等同于问题中的静态类字段。(我编辑了它以匹配您在代码中使用的名称。)@AndréReichlet我编辑了我的答案以包含一个工作片段。
class AddOrSelectAddress {
    static body; // <-- Error

    static async open() {
        await $.get(basePath + 'Manage/AddOrSelectAddress', null, result => {
            this.body = document.createElement('div');
            this.body.innerHTML = result;
        });
        // ...
    }

    static someOtherMethod() {
        // do something with body
    }
}