Nashorn可写财产

时间:2014-09-07 02:16:02

标签: java nashorn writable

我试图在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);

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

1 个答案:

答案 0 :(得分:0)

它不是Nashorn的错误:你只是将x的值(这是一个哈希)重新定义为其他东西。

javascript中的任何内容都无法阻止此操作,除非您像使用Object.defineProperty一样。