2014-09-07 5 views
0

다음과 같이 내가 Java8에서 Nashorn에서 객체 리터럴에 쓰기 가능하지 않은 속성을 사용하는 것을 시도하고있다 :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); 

내가 같은 x를 정의하기 때문에 오류가 기대하고있는 곳 코드 (200) 인쇄 쓸 수 없다.

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}} false로 쓰기 가능한 속성을 설정하는 것입니다입니까? 그것은 Nashorn 버그입니까, 아니면 뭔가 빠졌습니까?

답변

0

Nashorn 버그가 아닙니다. x 값 (해시 값)을 다른 값으로 재정의하는 것입니다.

당신이 그랬던 것처럼 Object.defineProperty를 사용하지 않는다면 javascript의 어떤 것도 이것을 멈출 수 없습니다.