2017-09-24 1 views
0
var person = {}; 

Object.defineProperty(person,"name",{ 
    writable: true, 
    configurable: false, 
    value: "Sahand" 
}); 

alert(person.name); // "Sahand" 
person.name = "Mahmoud"; 
alert(person.name); // "Mahmoud" 

Object.defineProperty(person, "name", { 
    writable: false 
}); 

person.name = "Sandra"; // "Mahmoud" 
alert(person.name); 

Object.defineProperty(person, "name", { // Error 
    writable:true 
}); 

person.name = "Sahand"; 

이 코드에서 defineProperty()은 호출 된 처음 두 번 올바르게 작동하지만 세 번째 오류가 발생합니다. 이것은 객체가 defineProperty() 호출에서 configurable:false을 호출하면 연속적으로 호출하면 오류가 발생한다고 생각했기 때문에 나에게 혼란 스럽습니다. 대신, 첫 번째는 writable:false을 설정 한 후 다른 하나는 수행하지 않습니다. 여기 규칙은 무엇입니까? MDN의 Object.defineProperty docs에서언제 Object.defineProperty()에서 오류가 발생합니까?

+0

[구성 할 수없는 속성 설명 자의 \ [열거 가능 및 \] 쓰기 가능성을 설정할 수있는 이유는 무엇입니까?] (https://stackoverflow.com/q/9829817/1048572) – Bergi

답변

0

:

속성이 객체에서 삭제 할 수 있는지 여부 및 (false로 쓰기 제외)의 속성을 변경할 수 있는지 여부를 동시에 구성 가능한 속성을 제어합니다.

구성 할 수없는 개체를 잘못 구성하면 throw됩니다. 그러나 구성 할 수없는 경우에도 writable: false으로 변경하는 것은 잘못되었습니다.

관련 문제