Правильный способ присвоения свойству __proto__ - PullRequest
6 голосов
/ 10 декабря 2010

У меня есть десериализованные объекты из JSON, для которых я хотел бы назначить новый прототип для обеспечения различных функций получения и установки.Очевидный способ сделать это (как упоминалось в этом вопросе ) - установить

myJsonObj.__proto__ = { function1: /* ... */, function2: /* ... */ };

Однако, поскольку MDC указывает на , свойство __proto__является нестандартным и не рекомендуется.Есть ли какой-либо совместимый со стандартами способ (для некоторого определения «стандартов») достичь того же эффекта, не создавая много новых объектов-оболочек?

1 Ответ

4 голосов
/ 10 декабря 2010

Не существует совместимого со стандартами способа изменения прототипа объекта после его создания. Существует совместимый со стандартами способ создания объектов с любым прототипом, который вы пожелаете при анализе из JSON.

С http://www.json.org/js.html:

Необязательный параметр reviver - это функция, которая будет вызываться для каждого ключ и значение на каждом уровне конечный результат. Каждое значение будет заменено результатом реаниматора функция. Это может быть использовано для реформы общие объекты в экземпляры псевдоклассы, или для преобразования даты строки в объектах Date.

...