gpt4 book ai didi

javascript - 在构造函数中中止

转载 作者:行者123 更新时间:2023-12-05 03:19:58 24 4
gpt4 key购买 nike

在 JavaScript 和/或 TypeScript 中,解决以下问题的常用方法是什么?

假设我们有一个类,其构造函数依赖于某些操作。如果该操作失败,则不应创建实例。

例子:

class Item {

constructor(itemId) {

// Try to get the data for the passed-in item id
const itemData = itemDataMap.get(itemId);

// If the item data was found
if (itemData) {
// Great, continue to init the instance as normal...
}
else {
// Problem: We can't init the instance without the item data.
// Hence we don't want to return an instance.
// What should we do here?
}
}
}

我能想到的解决方案包括尝试返回空对象或抛出错误。但是否有通用/首选方法?

最佳答案

我个人喜欢没有任何副作用的纯构造函数。您只需传递数据,它就会创建您的对象。它更易于使用、测试和调试。

如果您希望产生副作用(如验证、数据获取),请在负责该操作的对象上创建静态函数。

另一件好事是您可以将该函数转换为异步函数而不会出现任何问题(构造函数不能是异步的)。

class Item {
constructor(data) {
//...
}

static create(id) {
if (id === 1) {
throw new Error("my error")
}
return new Item({
id
})
}
}


console.log(Item.create(2))
console.log(Item.create(1))

关于javascript - 在构造函数中中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73312434/

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