javascript - 如何在类初始化时从构造函数数据创建对象
问题描述
我希望当我实例化类的实例时,TableCategory
使用实例化时传入的数据创建一个对象。我希望这在实例化时自动发生。我不想实例化类,然后调用创建对象的方法。这似乎不必要的麻烦。
我正在使用一个类,因为然后我想使用 getter 和 setter 来操作结果对象以进行多个实例化。(如果你想知道为什么我不只是首先使用一个对象。)
我对 JS 中的类不是 100% 清楚,所以我不确定我哪里出错了。请注意,对象的创建是一个函数的产物,它需要一个在实例化时传入的数组和一个类本机的数组。
这是我的课:
export class TableCategory {
constructor(categoryValues = []) {
this.categoryValues = categoryValues;
this.categoryKeys = ['alpha','beta','gamma', 'delta'];
this.categoryData = this.categoryKeys.forEach(function(key, i) {
return this.categoryData[key] = this.categoryValues[i];
});
}
}
然后,例如:
const foo = new TableCategory(['a'. 'b', 'c', 'd']);
console.log(foo.categoryData.beta); // b
也许我需要使用static
?不确定,感谢任何帮助
解决方案
forEach
不返回除undefined
. 您仍然可以通过功能性方式获得所需的对象,但使用Object.fromEntries
.
另外,正如您所说,您使用一个类是因为您打算使用 getter 和 setter 来改变实例,我认为将值和键与第三个属性分开存储并不是一个好主意,第三个属性包含所有键/值信息。
例如,您可以这样做:
class TableCategory {
constructor(values = []) {
this._obj = Object.fromEntries(['alpha','beta','gamma', 'delta']
.map((key, i) => [key, values[i]]));
}
get values() {
return Object.values(this._obj);
}
get keys() {
return Object.keys(this._obj);
}
}
let obj = new TableCategory(["this", "is", "a", "test"]);
console.log(obj.values);
推荐阅读
- php - 在 PHP 中使用 offset 和 limit by 和准备好的语句,而不会出现绑定参数错误
- python-3.x - recursionerror:与 skopt 相比,在 tensorflow 中超出了最大递归深度
- python - 基于列中的子字符串对行值求和
- ip - 无法到达两个路由器后面的网络摄像头
- swift - How to write to IOHIDDevice endpoint with IOKit
- java - 如何在 API 16 中使用过渡动画?
- java - 上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:
- python - 试图在cmd(python)中安装turtle
- reactjs - 从 API 获取后无法显示图像
- docker - Windows 10 Docker 机器退出状态 255