【问题标题】:[Class].prototype can be changed, despite Object.freeze([Class])[Class].prototype 可以更改,尽管 Object.freeze([Class])
【发布时间】:2021-08-04 14:47:43
【问题描述】:

我创建了一个类 Money,旨在如下所示是不可变的

    class Money{ 
             constructor(currency, amount)
             {
                 // this.curre... 
                 Object.freeze(this) // new instances are immutable
             }
     }

     // after that i want the [[Prototype]] of class.prototype to be null 
     Object.setPrototypeOf(Money.prototype,null)

     // to be sure that my class's prototype is not going to be changed
     Object.freeze(Money)

但是

     Object.setPrototypeOf(Money.prototype, {}) //
     console.log(Money.prototype) // I got {}

     // I must add Object.freeze(Money.prototype) ???

原型不是类/构造函数的真正属性吗?

【问题讨论】:

    标签: javascript class object


    【解决方案1】:

    Object.freeze() 只影响你传递给它的对象。它不会传递冻结作为属性值的所有对象。

    如果你有对象a:

    let a = {
      b: {
        c: "Hello";
      }
    };
    

    那么如果Object.freeze(a) 使a.b 的属性无法更改,那将是非常令人惊讶的,因为这是一个不同的对象。

    除此之外,如果冻结构造函数的一个实例也会导致构造函数的原型被冻结,那就更令人惊讶了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多