我正在建立一个静态类来将数据存储在数组中,我想声明一个静态变量,但是我不知道如何在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
答案 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可能正是您想要的。可以在类声明中支持静态变量/方法。