0

我正在尝试在 Java8 的 Nashorn 中的对象文字中使用不可写属性,如下所示:

'use strict';
var p =  { x: {value: 100, writable:false}};
p.x = 200; // should not allow to change x, but it does
print(p.x);

代码打印 200 我期待一个错误,因为我已将 x 定义为不可写。

如果我使用 Object.defineProperty() 函数来创建属性或将属性设置为不可写,它就可以工作。正如预期的那样,以下代码会导致错误:

'use strict';
var p =  { x: {value: 100, writable:false}};
Object.defineProperty(p, "x", {writable:false});
p.x = 200; // An error
print(p.x);

我的问题是为什么在表达式中将可写属性设置为 false 在{ x: {value: 100, writable:false}}第一种情况下不起作用?是 Nashorn 错误还是我遗漏了什么?

4

1 回答 1

0

这不是 Nashorn 错误:您只是将 x 的值(这是一个哈希)重新定义为其他内容。

除非您像以前那样使用 Object.defineProperty,否则 javascript 中没有任何东西可以阻止这一点。

于 2014-09-07T15:17:17.550 回答