首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >deepFreeze与真实不可捉摸的区别是什么?

deepFreeze与真实不可捉摸的区别是什么?
EN

Stack Overflow用户
提问于 2018-06-15 13:07:46
回答 1查看 478关注 0票数 0

你好,谢谢你的进阶。

我最近读到关于object.freez和deep.freez的文章。

考虑到js没有不可变的结构,我现在想知道这与不变性这一标准术语有什么不同。

报价:如前所述,JavaScript没有不变的结构,但不变可以通过原则和规则来实现。

如何看:代码来源:

代码语言: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的信息

亲切的问候失去了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 13:10:45

这两个点都是正确的-在JavaScript中没有默认不变的数据结构。例如,在创建时没有可以创建的“不可变对象”的数据结构。

但是,Object.freeze是JavaScript/ECMAScript规范中的一种方法,它在创建对象之后冻结其属性,本质上使其不可变。

您的deepFreeze函数的核心是调用Object.freezedeepFreeze确保如果一个对象具有同样是对象的属性,它也将被冻结。

您链接到的这篇文章实际上提到了Object.freeze作为创建“不可变”对象的方法。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50876291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档