java Nashorn可写属性
我试图在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定义为不可写,所以我预期会出现错误
如果我使用这个对象。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在第一种情况下不起作用?是纳肖恩虫子还是我错过了什么
# 1 楼答案
这不是Nashorn bug:您只是将x的值(它是散列)重新定义为其他值
javascript中的任何内容都无法阻止此操作,除非您使用对象。像你一样定义财产