Как разрешить добавить свойство объекта, но остановить Изменение набора свойств объекта

У меня есть некоторый глобальный объект 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)
Другие вопросы по тегам