有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    javascript中的任何内容都无法阻止此操作,除非您使用对象。像你一样定义财产