Запретить изменять свойство объекта

Допустим есть следующий объект:

var Config = {};
Config.secretKey = "yo3cds";

Свойство Config.secretKey после создания не должно изменяться. Для этого можно использовать метод Object.defineProperty() с параметром writable: false.

var Config = {};

// Создание свойства, которое нельзя изменить
Object.defineProperty(
    Config,      // объект, где создаётся свойство
    "secretKey", // свойство
    {
        value: "yo3cewqds", // значение
        writable: false     // запретить изменять свойство
    }
);

На примере выше было создано свойство Config.secretKey, которое теперь нельзя изменить.

Config.secretKey; // yo3cewqds

// Попытка изменить свойство
Config.secretKey = "Новое значение";

Config.secretKey; // yo3cewqds

При этом повторное использование метода Object.defineProperty() для свойства Config.secretKey будет возвращать ошибку «нельзя переопределить свойство: secretKey» (на англ. «VM1650:1 Uncaught TypeError: Cannot redefine property: secretKey»).

Метод Object.defineProperty() появился в EcmaScript 5.1, поддерживается всеми современными браузерами, полная поддержка IE с версии IE 9.