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

时间:2019-01-05 01:18:07

标签: 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];
    }

}

谢谢<3

3 个答案:

答案 0 :(得分:3)

当前,不能将非函数属性添加到类定义中的类本身中。看起来很丑,但是您必须为类定义分配属性 outside

class GCache {
  ...
}
GCache.cache = {};

还要注意,您的getFromCache函数可能有一个错误:如果正在搜索的id在缓存中不存在 ,您可能想早点返回:

if(!this.isOnCache(id)) return;

class GCache {
    /**
     * 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];
    }

}
GCache.cache = {};
GCache.addToCache('myid', 'data');
console.log(GCache.getFromCache('myid'));

但是,在这种情况下,使用普通对象而不是类可能会更容易。毕竟,该类并没有用于实例化任何东西,对于一个对象,您都可以在对象内部定义cache ,并通过消除所有这些来减少语法干扰static s:

const GCache = {
  cache: {},
  isOnCache(id) {
    return this.cache.hasOwnProperty(id);
  },
  addToCache(id, json) {
    if (this.isOnCache(id)) return;
    this.cache[id] = json;
  },
  getFromCache(id) {
    if (!this.isOnCache(id)) return;
    return this.cache[id];
  }
}
GCache.addToCache('myid', 'data');
console.log(GCache.getFromCache('myid'));

答案 1 :(得分:1)

如果您要为该类的所有实例指定静态变量, 宣布: GCache.cache = {} 在您的班级声明下方

答案 2 :(得分:0)

Babel的https://codepen.io/DanielRuf/pen/QzmgJR可能正是您想要的。可以在类声明中支持静态变量/方法。