我想知道freezing
对象原型是否有任何警告。我试图创建一个不可变对象,但从文档
作为对象的值仍然可以修改,除非它们也是 冷冻
我试图使__proto__
属性不可变,我的初始尝试涉及freeze
实例:
$ node --version
v0.12.7
$ node
> function Test() {}
undefined
> Test.prototype = {
... hi: function() { return 'hello' }
... }
{ hi: [Function] }
> t = Object.freeze(new Test())
{}
> t
{}
> t.hello = 'hi'
'hi'
> t
{}
> t.hi
[Function]
> t.hi()
'hello'
> t.__proto__.hi = 'changed'
'changed'
> t.hi
'changed'
但是当prototype
被冻结时,__proto__
对象按预期不可变。
> Test.prototype = Object.freeze({
... hi: function() { return 'hello' }
... })
现在Test
的实例有一个不可变的__proto__
对象(从shell中观察到)。我想知道冻结对象原型有什么副作用(可能涉及多个实例?或正确的对象实例化?)。目标环境用于节点。谢谢
答案 0 :(得分:3)
冻结原型的副作用是(重复地)原型被冷冻。这是否会导致问题取决于您的应用程序打算如何使用原型。就语言而言,它没有任何本质上的错误。我甚至认为它的风格很好,如果不是因为虚拟机有时候仍然没有非常有效地实现冻结物体(在某些情况下它们可能比常规物体慢,因为历史原因它们是被视为特例)。