问题描述
让我们假设我有一个对象,它维护一个项目数组。在使用这个对象时,我想确保没有人可以直接将项目添加到数组中,而只能使用适当的方法。从外部,您可以迭代数组并从中获取项目,但您不应该能够添加项目。如果需要添加项目,则需要调用实例函数 addItem
。
Javascript 不支持此功能,因为公开 Array 对象将使任何人都可以向其中添加项目。
使用 Typescript,我可以使用 getter 并返回 ReadOnlyArray 类型而不是 Array 类型。
所以我的对象可能看起来像这样:
class SomeObject {
#items: Array<string> = new Array<string>();
get items() : ReadOnlyArray<string> {
return #items;
}
addItem(item: string) {
// do something special ...
#items.push(item);
}
}
class SomeObject {
items: Array<string> = new Array<string>();
addItem(item: string) {
// do something special ...
items.push(item);
}
}
我知道我并没有真正封装/隐藏我的数组,因为 ReadOnlyArray 是它唯一的语法糖,但它可以帮助防止有人不小心以错误的方式使用该对象。
这是否值得付出努力,我应该采用这种方法还是简单地将数组公开为属性?
更广泛地提出这个问题:我应该尝试在 Typescript/Javascript 中强制执行 OOP 封装,还是应该直接忽略它,因为它不符合 Javascript 的习惯?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)