Java Nashorn可写属性

Java Nashorn可写属性,java,nashorn,writable,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()函数来创建属性或将属性设置为不可写,那么它可

我试图在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 bug还是我遗漏了什么?

这不是一个Nashorn bug:您只是将x的值(它是一个散列)重新定义为其他值

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