Object.defineProperty - это то, что вы хотите.
Например:
var obj = {};
Object.defineProperty(obj, 'key', {
enumerable: false,
configurable: false,
writable: false,
value: 'static'
});
Будет определять "obj.key" со значением: "static", и оно будет доступно только для чтения.
- Enumerable означает, что он будет отображаться (или нет) при перечислении свойств объекта.
- Доступно для записи означает, что если вы хотите, чтобы оно было доступно только для чтения, вы бы сказали ложь. недоступно для записи.
- Настраивается на false, если вы не хотите, чтобы его можно было удалить с объекта.
По сути, помещая их все в ложь, вы создаете константы для объекта. Кстати, их значения по умолчанию должны быть ложными.
Так эффективно это делает:
Object.defineProperty(obj, 'property', { value: 'value'});
Создаст константу в объекте obj, который называется property, со значением value. Или вы могли бы сделать это
function setConstant(obj, key, value)
{
Object.defineProperty(obj, key, {value: value });
}
var obj = {};
setConstant(obj, "constantName", "constantValue");
Сделал бы его очень читабельным.