Javascript-每个实例上的增量类变量

Javascript-每个实例上的增量类变量,javascript,class,ecmascript-6,es6-class,Javascript,Class,Ecmascript 6,Es6 Class,如果已经有人问过,请告诉我。如何在每个实例上递增一个类变量?假设我有以下键类,我想在创建实例时增加键变量,我尝试了: class Key{ key = 1 constructor(){ this.key = key Key.key++ } print_key(){ console.log(this.key) } } 然后我做了几个例子: key1 = new Key() key2 = new Key()

如果已经有人问过,请告诉我。如何在每个实例上递增一个类变量?假设我有以下键类,我想在创建实例时增加键变量,我尝试了:

class Key{
    key = 1
    constructor(){
        this.key = key
        Key.key++
    }

    print_key(){
        console.log(this.key)
    }
}
然后我做了几个例子:

key1 = new Key()
key2 = new Key()
key3 = new Key()

key1.print_key()
key2.print_key()
key3.print_key()
预期的结果将是:

1
2
3

上面的代码不起作用,我找不到具体的答案,或者有些答案似乎对我不起作用。

您可以使用静态属性来记住已经创建了多少个,然后在初始化
键时使用该属性。仍然处于第3阶段,因此它们还不在规范中,但它们已经相当成熟了

类密钥{
//静态特性
静态lastKey=0;
//使用类字段建议语法的实例属性
//注意我没有用1初始化它,这有点误导。
钥匙
构造函数(){
//增派
this.key=++key.lastKey;
}
打印密钥(){
console.log(this.key)
}
}
const key1=新键();
const key2=新键();
const key3=新键();
键1.打印_键();
键2.打印_键();

键3.打印_键()您可以在类外部存储对键的引用。例如,整个脚本可能如下所示:

var key = 1
class Key {
    constructor(key){
        this.key = key
    }

    print_key(){
        console.log(this.key)
    }
}
key1 = new Key(key)
key++
key2 = new Key(key)
key++
key3 = new Key(key)
key++
key1.print_key()
key2.print_key()
key3.print_key()

另一种方法是保留一个键数组。需要注意的重要一点是,一个对象的实例对同一类型对象的其他实例一无所知——它不知道存在多少相同类型对象的实例,因此值必须存储在其他地方。您的代码将“key”的值设置为1,但该行代码用于每个新实例,而不仅仅是第一个实例。这有帮助吗?

您想要的结果是不正确的,因为javascript中的每个类都有自己的上下文
,每次创建类的新实例时,例如:

const key1=new Key()

您可以创建新的上下文

所以,若需要多次增量,并且希望使用类,那个么需要为类添加方法

class-MyClass{
构造函数(){
这个值=1;
}
//增值法
增量(){
这个。值+=1;
}
//打印您的值的方法
打印(){
console.log(this.value)
}
}
const myClass=new myClass();
myClass.print();//打印初始值
myClass.increment();//打印初始值

myClass.print();//打印递增值
这似乎是静态属性而不是实例属性的一个很好的用途。因此,我尝试了您发布的第一个代码段,在“static lastKey=0”行上出现了“意外标记”错误,我是否遗漏了任何内容?这里的代码似乎在处理堆栈溢出。@chacha-我应该更清楚上面的哪些部分依赖于正在进行的建议。上面使用的所有方案都已经进行了相当长的时间,但它们仍然处于第3阶段(等待多个生产实现)。我已经更新了答案,标出了每个人具体使用的内容,并在最后展示了一个纯ES2015(和ES2019)解决方案。这非常清晰和简洁。代码是有效的。非常感谢。