Как разрешить добавить свойство объекта, но остановить Изменение набора свойств объекта
У меня есть некоторый глобальный объект CD, и он имеет следующие свойства:
window.cd = {
config:{
title:"..."
}
a:func...,
b:56,
c:..
}
Я хочу, чтобы пользователь разрешил добавлять свойства в cd и cd.config, но свойства cd.a, cd.b, cd.config.title
быть запечатанным (никакие изменения не допускаются) .
Пользователь не должен иметь возможность удалять window.cd или эти свойства (другие свойства, которые он может удалять или изменять) .
Я пробовал со следующим:
window.cd.a.seal();
window.cd.b.seal();
window.cd.config.title.seal();
но он выбросил следующую ошибку:
window.cd.config.title.seal не является функцией
1 ответ
Быстрый образец, делающий заголовок непишущим
"use strict";
// Use strict mode or assignments to nonwritable properties silently fail
window.cd = {
config:{
title:'mytitle'
},
a:12,
b:56
}
console.log(cd.config.title)
Object.defineProperty(cd.config,'title',{writable:false});
cd.config.title="Test"; // Fails, throws exception if Strict mode
console.log(cd.config.title)