Создайте объект, в котором каждое свойство и подпроцесс доступны для записи только один раз
Есть ли способ создать объект с помощью Javascript, где каждое свойство объекта доступно для записи только один раз и не может быть изменено после первой записи?
Все, что я могу, это прокси-объект, который имеет хуки при назначении, ~ что-то вроде этого:
var p = new Proxy({}, {
set: function(target, property, value, receiver){
Object.defineProperty(target, property, {
value: value,
writable: false
})
}
});
Но Proxy стоит дорого, и он доступен не во всех движках JS, которые мне нужно поддерживать. Есть ли способ достичь этого без использования прокси?
Это для библиотеки. И я хочу выполнить работу по неизменяемости от имени пользователя и предотвратить попадание пользователя в определенные ловушки, используя неизменяемость.
Я хочу создать неизменный объект, но я хочу, чтобы объект был расширяемым. Тем не менее, любое расширение объекта, я хочу быть неизменным свойством.
примечание: Object.freeze () не позволяет объекту быть расширяемым после факта, что не будет работать для моего варианта использования.
Вот пример:
let foo = {bar: 3};
foo.bar = 2; // should fail
foo.x = 1; // ok
foo.x = 2; // should fail
foo.y = {}; // ok
foo.y.z = 5; // ok
foo.y.z = 3; // should fail