Этот код-шим фактически не выполняет сквозную запись: когда вы устанавливаете свойство, значение запоминается только в оболочке-наблюдателе и не передается базовому объекту. Он предназначен для чисто JavaScript-объектов, свойства которых не имеют побочных эффектов (например, изменение DOM, в случае innerHTML
).
Было бы затруднительно выполнить сквозную запись, поскольку нет способа напрямую вызвать установщик прототипа. Вам придется временно удалить свойство, записать в базовое свойство, а затем вернуть его на место.
Однако не стоит преследовать ИМО. Узлам DOM разрешено быть "хост-объектами", поэтому нет никакой гарантии, что какая-либо функция свойств объекта native-JavaScript будет работать с ними вообще.
(В любом случае добавление новых членов в прототип Object
обычно считается действительно плохой идеей.)
Я мог бы просто не слушать изменения innerHTML
Я думаю, что лучше, да.