gpt4 book ai didi

javascript - 在 v8 中卡住对象 __proto__

转载 作者:行者123 更新时间:2023-11-28 19:00:47 26 4
gpt4 key购买 nike

我想知道卡住对象原型(prototype)是否有任何警告。我试图创建一个不可变的对象,但从文档中发现

values that are objects can still be modified, unless they are also frozen

我试图使 __proto__ 属性不可变,我最初的尝试涉及卡住实例:

$ 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 观察到)。我想知道卡住对象原型(prototype)是否有任何副作用(可能涉及多个实例?或正确的对象实例化?)。目标环境用于 Node 。谢谢

最佳答案

卡住原型(prototype)的副作用是(同义反复)原型(prototype)被卡住。这是否会导致问题取决于您的应用程序打算如何使用原型(prototype)。就语言而言,它并没有本质上的错误。我什至认为这是一种很好的风格,如果不是因为虚拟机有时仍然不能非常有效地实现卡住对象(在某些情况下它们可能比常规对象慢,因为由于历史原因它们被认为是一种特殊情况) )。

关于javascript - 在 v8 中卡住对象 __proto__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32593220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com