如何在 ES6 类中定义静态属性 [重复]
Posted
技术标签:
【中文标题】如何在 ES6 类中定义静态属性 [重复]【英文标题】:how to define a static property in the ES6 classes [duplicate] 【发布时间】:2018-06-09 07:23:09 【问题描述】:我想在 ES6 类中拥有一个静态属性。该属性值最初是一个空数组。
class Game
constructor()
// this.cards = [];
static cards = [];
Game.cards.push(1);
console.log(Game.cards);
我该怎么做?
【问题讨论】:
jsfiddle.net/03xnguf6 这不是有效的 ES6 语法。 如果需要检索一些常量并且不需要来自同一个类,那么导出对象的模块就足够了。例如:module.exports = AppConstants: SOME_CONSTANT: value ;
并使用,只需将其导入为const AppConstants = require('../path/to/AppConstants');
并调用代码为AppConstants.SOME_CONSTANT;
在 2021 年,您可以像以前一样声明静态属性。您的代码 sn-p 现在可以正常工作了! (caniuse.com/?search=class%20fields)。
【参考方案1】:
class Game
constructor()
Game.cards = [];
Game.cards.push(1);
console.log(Game.cards);
你可以像这样定义一个静态变量。
【讨论】:
感谢您的信息,但是在类本身内没有为该类创建静态变量的概念吗?看到属性浮动在类之外的某个地方很奇怪,我知道在 Java 中你可以简单地创建一个静态类变量......这在 javascript 中还不可能吗? @user2774480Game.cards = []
部分完全符合您的要求。在类声明中没有语法可做。【参考方案2】:
一种方法可能是这样的:
let _cards = [];
class Game
static get cards() return _cards;
那么你可以这样做:
Game.cards.push(1);
console.log(Game.cards);
您可以在discussion 中找到一些关于在 es6 中包含静态属性的有用点。
【讨论】:
注意事项(可能有帮助或有害):使用这样的 getter 在功能上与下面的 zarnifoulette 之类的答案不同,因为 getter 允许您访问和修改类的“静态属性” (即使它们在技术上不是类的属性,而是在类旁边定义的闭包的值)即使在使用诸如 Object.freeze() 之类的东西来非正式地防止对类的进一步修改之后结构/属性/键。 以这种方式在全局范围内定义变量是一个非常糟糕和危险的想法。尽管在@zagoa 的回答中,变量声明在类定义之外,但它的范围是 Game 类(注意不是实例或原型,而是类本身),这实际上是一个静态属性。在他的回答中,您还可以在 Game 类中添加这种静态 getter 方法,但它不会为其添加任何额外的功能。请注意,每 200 毫秒会重新计算一次吸气剂,这将是有害的。以上是关于如何在 ES6 类中定义静态属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章