Я пишу javascript-программу, чтобы понять, как настраиваемый флаг установлен на false, влияет на свойство. программа:
let user={
name:"heman"
};
Object.defineProperty(user, "name",{
configurable:false
});
try{
Object.defineProperty(user, "name",{
configurable:true
})
}//Throws error
catch(err){console.log(err)}
try{
Object.defineProperty(user, "name",{
enumerable:false
});
} //Throws Error
catch(err){console.log(err)}
try{
Object.defineProperty(user, "name", {
writable:false
});
} //Does'nt Throws Error. But Why?
catch(err){console.log(err)}
В этой программе я сначала создал объект с именем user, пользователь содержит одно свойство, то есть имя: "heman". Я установил настраиваемый флаг свойства name в false (configurable: false). Затем я попытался снова изменить настраиваемый флаг на true. Он выдал ошибку. После того, как я попытался изменить перечислимый флаг на false, который является противоположным ему значением по умолчанию, он снова выдал ошибку. На этот раз, когда я попытался изменить флаг записи на false. Флаг изменился без каких-либо ошибок. Даже после установки настраиваемого флага на false, почему свойство все еще настраивается? Почему изменился записываемый флаг без каких-либо ошибок. Я хочу знать, что происходит. В следующих двух случаях:
1) настраиваемый флаг имеет значение true
2) настраиваемый флаг имеет значение false
Почему изменяемый флаг изменился без каких-либо ошибок.
Поскольку спецификация позволяет изменять флаг writable
для свойства данных с true
на false
даже если свойство configurable
свойства имеет значение false
. К сожалению, спецификация не так хороша, чтобы сказать, почему вещи такие, какие они есть, но обычно они очень точны в том, что они есть. :-)
Я хочу знать, что происходит в следующих двух случаях:
Лучше всего прочитать инструкции по выполнению операции.
1) настраиваемый флаг установлен в true
В этом случае вы можете изменить writable
с false
на true
или с true
на false
; свойство полностью настраивается.
2) настраиваемый флаг установлен в false
Спецификация позволяет изменять флаг writable
для свойства данных с true
на false
, но не с false
на true
.