我正在构建一个静态类来将数据存储在一个数组中,我想声明一个静态变量,但我不知道如何在 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
目前*(有关详细信息,请参见答案底部),无法将非函数属性添加到类定义中的类本身。它看起来很难看,但您必须在类定义之外分配属性:
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)
| 归档时间: |
|
| 查看次数: |
3139 次 |
| 最近记录: |