Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么将对象设置为不可扩展会使其[[prototype]]不可变?_Javascript - Fatal编程技术网

Javascript 为什么将对象设置为不可扩展会使其[[prototype]]不可变?

Javascript 为什么将对象设置为不可扩展会使其[[prototype]]不可变?,javascript,Javascript,报纸上说 此方法使目标的[[prototype]]不可变;任何[[prototype]]重新分配都将抛出类型错误。此行为特定于内部[[prototype]]属性,目标对象的其他属性将保持可变 我的问题是: 为什么将对象设置为不可扩展会使其[[prototype]]不可变? (Object.preventExtensions(),Object.seal(),Object.freeze()等)如果内部[[prototype]]]不是一个不可变的属性,则可以通过交换内部[[prototype]]来规避

报纸上说

此方法使目标的
[[prototype]]
不可变;任何
[[prototype]]
重新分配都将抛出
类型错误。此行为特定于内部
[[prototype]]
属性,目标对象的其他属性将保持可变

我的问题是:

为什么将对象设置为不可扩展会使其[[prototype]]不可变?
Object.preventExtensions()
Object.seal()
Object.freeze()
等)

如果内部
[[prototype]]]
不是一个不可变的属性,则可以通过交换内部
[[prototype]]来规避
对象.preventExtensions()
使用另一个值创建对象,有效地将新值上的所有属性添加到对象:

设a={};
//a现在具有Array.prototype的所有属性
setPrototypeOf(a,Array.prototype);
a、 推(foo);
控制台日志(a);
设b=Object.preventExtensions({});
//不能以相同的方式将属性添加到b
setPrototypeOf(b,Array.prototype);
b、 推(“杆”);

控制台日志(b)很抱歉,我在解析标题问题时遇到问题。正如@Patrick所回答的,您是否在问“为什么将对象设置为不可扩展会使其[[prototype]]不可变?”?我还可以把它理解为“为什么其他将对象设置为不可扩展的方法不能使其[[prototype]]保持不变?”比如
Object.seal()
Object.freeze()
@HereticMonkey你的第二种解释没有意义
Object.seal()
Object.freeze()
除了其他效果外,还可以防止扩展(并使[[prototype]]不可变)。@PatrickRoberts告诉你,我将编辑这个问题以使它更清楚,好吗?显然,对你或作品的要求太多了?@HereticMonkey我无权使用特定的解释来编辑这个问题,因为这可能与作者的意图相冲突。作者可能没有理解你的问题(因为他们可能不是以英语为母语的人),或者可能只是很忙。或者他们只是认为他们的问题很好,不需要澄清,因为已经有了答案。谁知道呢。无论如何,感谢您的编辑,如果有什么事情发生的话,我们将拭目以待。@HereticMonkey抱歉,我不是母语人士,但@PatrickRoberts是对的,
Object.seal()
Object.freeze()
也使[[prototype]]不可变。如果你对清晰(和精确)的版本有任何想法,请告诉我,我会编辑。谢谢你,兄弟,只留下了一个困惑,我们在其[[原型]]上添加的方法是正确的吗?