我试图在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的错误还是我错过了什么?
答案 0 :(得分:0)
它不是Nashorn的错误:你只是将x的值(这是一个哈希)重新定义为其他东西。
javascript中的任何内容都无法阻止此操作,除非您像使用Object.defineProperty一样。