如何在 JS 类中定义静态变量

Nur*_*dez 5 javascript class

我正在构建一个静态类来将数据存储在一个数组中,我想声明一个静态变量,但我不知道如何在 javascript 上执行此操作。

JS代码:

class GCache {

    // Define cache variable
    static cache = {}; // <--- that is what i don't know how to do

    /**
     * Check if data is on cache
     * @param {*} id 
     */
    static isOnCache(id){
        return this.cache.hasOwnProperty(id);
    }

    /**
     * Add data to cache
     * @param {*} id 
     * @param {*} json 
     */
    static addToCache(id, json){
        if(this.isOnCache(id)) return;
        this.cache[id] = json;
    }

    /**
     * Obtain data from cache
     * @param {*} id 
     */
    static getFromCache(id){
        if(this.isOnCache(id)) return;
        return this.cache[id];
    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢<3

Cer*_*nce 7

目前*(有关详细信息,请参见答案底部),无法将非函数属性添加到类定义中的类本身。它看起来很难看,但您必须在类定义之外分配属性:

class GCache {
  ...
}
GCache.cache = {};
Run Code Online (Sandbox Code Playgroud)

另外请注意,你的getFromCache功能可能有一个错误:你可能想,如果提前返回id所搜索并没有在缓存中存在:

if(!this.isOnCache(id)) return;
Run Code Online (Sandbox Code Playgroud)

class GCache {
  ...
}
GCache.cache = {};
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,使用普通对象可能比使用类更容易。毕竟,这个类没有被用来实例化任何东西,而且对于一个对象,你既可以cache 在 object 内部定义,也可以通过摆脱所有statics 来减少语法噪音:

if(!this.isOnCache(id)) return;
Run Code Online (Sandbox Code Playgroud)


当前有一个提议允许您将静态非方法属性设置到类上。它目前处于第 2 阶段,这意味着它有望最终正式实施。一旦着陆,代码:

class GCache {
  ...
}
GCache.cache = {};
Run Code Online (Sandbox Code Playgroud)

可以替换为:

class GCache {
  static cache = {};
  ...
}
Run Code Online (Sandbox Code Playgroud)