实例化javascript类而不调用构造函数
短版 鉴于以下类别:实例化javascript类而不调用构造函数,javascript,class,Javascript,Class,短版 鉴于以下类别: class Foo { constructor() { throw new Error("No!") } // ... more functions ... } 如何获取Foo的实例 解释 该类实际上更像这样: const KEY = Symbol("BAR") function validateBarData(input) { /* throws error if input is not in the format:
class Foo {
constructor() {
throw new Error("No!")
}
// ... more functions ...
}
如何获取Foo的实例
解释
该类实际上更像这样:
const KEY = Symbol("BAR")
function validateBarData(input) {
/* throws error if input is not in the format: */
/* {name: "string", bartender: "string", drinks: [ "string" ]} */
}
class Bar {
constructor(name, bartender, drinks) {
this[KEY] = {name: name, bartender: bartender, drinks: drinks}
// now validate to protect against garbage input like
// 'name = 42' or 'drinks = undefined', etc.
validateBarData(this[KEY])
}
encode() {
return this[KEY]
}
static decode(data) {
validateBarData(data)
return new Bar(data.name, data.bartender, data.drinks)
}
// ... more functions ...
}
encode()。这里的实际编码/解码逻辑可能比“dumpthis[KEY]
”更复杂(例如,由条管理的编码对象)
解码时出现的问题:
validateBarData
被调用两次
- 虽然在
解码
的第一行之后,我们已经有了一个有效的内部状态来分配给这个[KEY]
,但必须先对它进行解构,然后重新创建它
我想避免这种重复,但我还没有找到正确的方法
我该怎么做呢?哎呀
let foo = Object.create(Foo.prototype)
或
在发布问题前几秒钟,我尝试了最后一件事,结果证明我应该在原型上调用Object.create
,而不是类本身。多么尴尬
我之所以发帖,是因为问题标题中的关键词没有出现在搜索结果中(在撰写本文时,很多都是关于java的,但不是javascript),所以这可能会在将来为其他人节省时间
static decode(data) {
validateBarData(data)
let bar = Object.create(Bar.prototype)
bar[KEY] = data
return bar
}