javascript - 我可以在我的类构造函数中调用一个与构造函数具有相同参数的函数吗?
问题描述
有很多关于构造函数和函数的问题,但似乎没有人回答这个确切的问题。
我知道 JS 中的这个“this”关键字存在问题,但我不确定我知道如何绕过这些限制。
我已经定义了一个类,它将一个对象作为构造函数参数,然后循环该对象并将它们分配给类属性。
然后我想扩展这些类并调用相同的构造函数,但稍作改动。我的目标是拥有一个init(obj)
由每个构造函数调用的函数。
class Thing {
constructor(obj) {
init(obj)
}
}
无论如何,这就是我的目标。我将有大量要扩展的类。这是我当前对前四个课程的冗余设置。
class Thing {
constructor(obj) {
for(let i in obj) this[i]=obj[i];
if(!Data[obj.type]) Data[obj.type] = [];
if(Data[obj.type]) Data[obj.type].push(this);
}
}
class Role extends Thing {
constructor(obj) {
super();
for(let i in obj) this[i]=obj[i];
if(!Data[obj.type]) Data[obj.type] = [];
if(Data[obj.type]) Data[obj.type].push(this);
}
}
所以我的问题是:我将如何减少构造函数的重复性?
解决方案
这可能会帮助你。
var Data = {}
class Thing {
constructor(obj) {
this._setFields(obj)
}
// you can overwrite this function in child classes
_setFields(obj) {
for (let i in obj) this[i] = obj[i]
this._setType(obj.type)
}
// you can overwrite this function in child classes
_setType(type) {
if (!Data[type]) {
Data[type] = [this]
} else {
Data[type].push(this)
}
}
}
class Role extends Thing {
constructor(obj) {
super(obj)
}
}
const r1 = new Role({ type: 'role', id: '1' })
const r2 = new Role({ type: 'role', id: '2' })
const t1 = new Thing({ type: 'ting', id: '10' })
console.log(Data)
推荐阅读
- c# - SignalR 在等待 Start 时抛出 SocketException
- .net - 插值字符串 $ 被视为无效字符并返回错误 BC30037 (vb.net)
- mule - 解析 CSV 文件并从中获取文件的值
- python - 无法预测fastai的输出
- go - 如何使用 PHP FFMPEG 更改音频二进制头字节偏移
- javascript - 当我将鼠标焦点放在元素上时,mouseenter 和 mouseleave 会继续触发
- android - 仅在 Recycler 视图中显示固定的项目数量,并在新页面中显示剩余项目(使用 Show all)
- python-3.x - python map如何与torch.tensor一起工作?
- angular - 收集结果
在打字稿中 - datetime - 创建具有不规则日期/时间格式列的 Hive 表