Создайте объект, в котором каждое свойство и подпроцесс доступны для записи только один раз

Есть ли способ создать объект с помощью 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

0 ответов

Другие вопросы по тегам