gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:17:26 25 4
gpt4 key购买 nike

我正在构建一个静态类来将数据存储在数组中,我想声明一个静态变量,但我不知道如何在 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

最佳答案

在最新的 JavaScript 环境中,您可以在类内部使用 static 关键字将属性分配给实例本身 - 您问题中的代码现在可以正常工作。

class SomeClass {
static someStaticProperty = {}
}
console.log(SomeClass.someStaticProperty);


在较旧的环境中,在最初发布问题时,无法将非函数属性添加到类定义中的类本身。它看起来很难看,但您必须在类定义的外部 分配属性:

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'));

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

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'));


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

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

可以替换为:

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

关于javascript - 如何在 JS 类中定义静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54048127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com