你好,谢谢你的进阶。
我最近读到关于object.freez和deep.freez的文章。
考虑到js没有不可变的结构,我现在想知道这与不变性这一标准术语有什么不同。
报价:如前所述,JavaScript没有不变的结构,但不变可以通过原则和规则来实现。
如何看:代码来源:
function deepFreeze(object) {
// Retrieve the property names defined on object
var propNames = Object.getOwnPropertyNames(object);
// Freeze properties before freezing self
for (let name of propNames) {
let value = object[name];
object[name] = value && typeof value === "object" ?
deepFreeze(value) : value;
}
return Object.freeze(object);
}
var obj2 = {
internal: {
a: null
}
};
deepFreeze(obj2);
obj2.internal.a = 'anotherValue'; // fails silently in non-strict mode
obj2.internal.a; // null我现在有点困惑
我认为不可变意味着不能在对象创建bean之后修改(更改)对象的值。据我所知,deep.freez实现了.那有什么区别呢?
希望这个问题是有意义的,因为我找不到任何关于deep.freez的信息
亲切的问候失去了。
发布于 2018-06-15 13:10:45
这两个点都是正确的-在JavaScript中没有默认不变的数据结构。例如,在创建时没有可以创建的“不可变对象”的数据结构。
但是,Object.freeze是JavaScript/ECMAScript规范中的一种方法,它在创建对象之后冻结其属性,本质上使其不可变。
您的deepFreeze函数的核心是调用Object.freeze。deepFreeze确保如果一个对象具有同样是对象的属性,它也将被冻结。
您链接到的这篇文章实际上提到了Object.freeze作为创建“不可变”对象的方法。
https://stackoverflow.com/questions/50876291
复制相似问题