如何解决在 Javascriot 中使用原型继承的不可变属性
我正在尝试将现有的 javascript 源代码从类重构为 OLOO 或函数式编程实践。我正在尝试解决以下问题:我有一个名为 Pipe 的类别。我想要一个总是从 Pipe 方法返回一个冻结对象的工厂。但是,我意识到这一点的唯一方法如下:
const Pipe = () => {
let id = null;
let pipe_product_id = null;
let note = null;
let owner_id = null;
let last_tested_day = null;
let status = null;
const set_id = (new_id) => {
id = new_id;
return obj_generation()
}
const init = (data) => {
id = data.id || null
pipe_product_id = data.pipe_product_id || null
note = data.note || null
owner_id = data.owner_id || null
last_tested_day = data.last_tested_day || null
status = data.status || null
return obj_generation()
}
const obj_generation = () => {
return Object.freeze({
id,pipe_product_id,note,owner_id,last_tested_day,status,init,set_id,})
}
return obj_generation();
}
使用该方案,可以读取属性,使 instance.some_attribute 和代码能够读取它。如果代码的某些部分尝试覆盖 .some_attribute,则在启用 use strict 时会抛出异常。但是,我发现 prepare() 函数是不必要的,但我没有实现其他解决方案。我想要另一种获得相同功能的方法,即删除“obj_generation”功能。
有什么想法吗?
谢谢,曼努埃尔
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。