Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript es6类并添加显式原型以跨类实例共享_Javascript_Ecmascript 6_Es6 Class - Fatal编程技术网

Javascript es6类并添加显式原型以跨类实例共享

Javascript es6类并添加显式原型以跨类实例共享,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,所以,我有一门课: class XYZ { constructor(name) { if (!new.target) new XYZ(name); this.name = name; } run() { } walk() { } addShoe() { // I want to add a shoe here IF it hasn't already been // ad

所以,我有一门课:

class XYZ {
    constructor(name) {
        if (!new.target) new XYZ(name);
        this.name = name;
    }

    run() {

    }

    walk() {

    }

   addShoe() {
       // I want to add a shoe here IF it hasn't already been 
       // added, by    any other instance
   }
}
现在,我需要所有实例共享一个变量,即:SHOES

我想做这件事的唯一方法是,有两种方法,要么在类(模块顶部)之外添加一个变量,要么把它放在原型上。 即

我尝试过添加静态变量,但不起作用。当然,我可以只使用set/get,但同样,这是一种仍然必须“访问/更新”“共享变量资源”的方法

有没有更直观的方法?当然,这是一个非常简化的版本-但是尝试使用es6“做事的方式”

我以以下几点结束。但这似乎仍然是错误的。你的想法

XYZ.SHOES =  new Set();
我相信我也尝试了以下方法,但没有成功:

class XYZ {
   constructor() {
     static SHOES =  new Set(); // <-- didn't work
     this.constructor.SHOES =  new Set(); // <-- didn't work

   }
}

XYZ.SHOES =  new Set(); // <- worked
let SHOES =  new Set(); // <-- worked
XYZ类{
构造函数(){

static SHOES=new Set();//那么您想要类的静态成员吗?我试过了,但没有真正起作用。您试过什么,问题出在哪里?我用我试过的方法更新了原始问题。谢谢。“如果其他实例没有添加鞋,我想添加鞋”听起来真是个糟糕的主意。这是一个全局变量,有其所有缺点。最好创建一个显式的
ShoeStore
类,并将其实例传递给XYZ实例。
class XYZ {
   constructor() {
     static SHOES =  new Set(); // <-- didn't work
     this.constructor.SHOES =  new Set(); // <-- didn't work

   }
}

XYZ.SHOES =  new Set(); // <- worked
let SHOES =  new Set(); // <-- worked