Вариант 1 - Полностью сделать объект неизменяемым.
const obj = Object.freeze({
name: 'John',
age: 31
});
obj.age = 32;
obj.email = 'john@example.com';
console.log(obj); // { name: 'John', age: 31 }
Вариант 2 - Добавлять новые поля при помощи
Object.defineProperty.
const obj = {
name: 'John',
age: 31
};
Object.defineProperty(obj, 'other', {
value: 'some data',
writable: true,
enumerable: true
});
Object.defineProperty(obj, 'email', {
value: 'john@example.com',
enumerable: true
});
Object.defineProperty(obj, 'secret', {
value: 'Woop-woop'
});
console.log(obj);
/* {
name: 'John',
age: 31,
other: 'some data',
email: 'john@example.com'
} */
obj.other = 'another data';
console.log(obj);
/* {
name: 'John',
age: 31,
other: 'another data',
email: 'john@example.com'
} */
console.log(obj.secret); // 'Woop-woop'
obj.secret = 'Boop-boop';
console.log(obj.secret); // 'Woop-woop'
Также, все
defineProperty можно объединить в один:
Object.defineProperties(obj, {
other: {
value: 'some data',
writable: true,
enumerable: true
},
email: {
value: 'john@example.com',
enumerable: true
},
secret: {
value: 'Woop-woop'
}
});