我正在尝试在 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 错误还是我遗漏了什么?