Javascript 如何在ES6类中定义静态属性

Javascript 如何在ES6类中定义静态属性,javascript,ecmascript-6,static,es6-class,Javascript,Ecmascript 6,Static,Es6 Class,我想在ES6类中有一个静态属性。此属性值最初是一个空数组 类游戏{ 构造函数(){ //这个是.cards=[]; } 静态卡=[]; } 游戏。扑克牌。推(1); 控制台日志(游戏卡) 您可以这样定义静态变量。一种方法是: let _cards = []; class Game{ static get cards() { return _cards; } } 然后你可以做: Game.cards.push(1); console.log(Game.cards); 您可以在这篇文章

我想在ES6类中有一个静态属性。此属性值最初是一个空数组

类游戏{
构造函数(){
//这个是.cards=[];
}
静态卡=[];
}
游戏。扑克牌。推(1);
控制台日志(游戏卡)

您可以这样定义静态变量。

一种方法是:

let _cards = [];
class Game{
    static get cards() { return _cards; }
}
然后你可以做:

Game.cards.push(1);
console.log(Game.cards);

您可以在这篇文章中找到一些关于在es6中包含静态属性的有用要点。

这不是有效的es6语法。如果需要检索某个常量而不需要来自同一类,则模块导出对象就足够了。例如:
module.exports={AppConstants:{SOME_CONSTANT:value}const{AppConstants}=require('../path/to/AppConstants')导入即可并以
AppConstants.SOME\u常量的形式调用代码需要注意的事项(可能有用也可能有害):使用这样的getter在功能上不同于下面zarnifoulette的答案,因为getter允许您访问和修改类的“静态属性”(即使它们不是类的技术属性,而是类旁边定义的闭包的值)即使在使用Object.freeze()之类的工具非正式地阻止对类结构/属性/键的进一步修改之后,在全局范围内以这种方式定义变量也是一个非常糟糕和危险的想法。尽管在@zagoa的回答中,变量声明在类定义之外,但其范围是游戏类(注意,不是实例或原型,而是类本身),这意味着真正的静态属性。在他的回答中,您也可以在Game类中添加这种静态getter方法,但它不会添加任何附加功能。请注意,getter每200毫秒重新计算一次,这将是有害的。感谢您提供的信息,但是在类本身中没有为该类创建静态变量的概念吗?看到属性在类之外的某个地方浮动是很奇怪的,我知道在Java中,您可以简单地创建一个静态类变量。。。这在javascript中还不可能吗?@user2774480
Game.cards=[]
部分正是您想要的。在类声明中没有语法可执行。
Game.cards.push(1);
console.log(Game.cards);