Цепочка прототипов и hasOwnProperty

84
19 октября 2019, 03:00

Не могу понять. На MDN пишут, что:

Длительное время поиска свойств, располагающихся относительно высоко в цепочке прототипов, может негативно сказаться на производительности (performance), особенно в критических в этом смысле местах кода. Кроме того, попытка найти несуществующие свойства неизбежно приведёт к проверке на их наличие у всех объектов цепочки прототипов.

hasOwnProperty — единственная существующая в JavaScript возможность работать со свойствами, не затрагивая цепочку прототипов.

Но ведь hasOwnProperty наследуемый метод, причем от Object.prototype, а значит при вызове происходит его поиск по всей цепочке, до Object.prototype от которого он наследуется. Или что-то я не пойму?

Какая разница, искать свойство без hasOwnProperty, и тем самым, есть вероятность долгого прохода через всю цепочку прототипов. Или с hasOwnProperty, и в таком случает обязательно проходить через всю цепочку, чтобы воспользоваться им, а уже с помощью него искать только собственное свойство объекта. Объясните пожалуйста какой профит со стороны производительности?

Ссылка на статью < < <

Answer 1

Теоретически — если представить себе случай с очень длинной цепочкой прототипов, в котором крайне критична производительность, то можно делать так:

if (Object.prototype.hasOwnProperty.call(obj, 'prop')) {
    // obj имеет собственное свойство prop
}

Такой вызов метода hasOwnProperty не будет проходить по цепочке прототипов obj.

Практически же заниматься подобными микрооптимизациями нет никакого резона до тех пор, пока нет данных профилирования, явно указывающих, что проблема в этом. В целом современные движки хорошо оптимизируют поиск по цепочке прототипов (т. к. это очень критично для производительности JS).

READ ALSO
Jquery отказывается работать

Jquery отказывается работать

Вот есть код в чате с формой и отправкой аякс запроса по нажатию на кнопкуНО увы ничего не происходит

121
Почему нету данных на сервере express

Почему нету данных на сервере express

Имеется код для отправки формы

92
Почему некорректно работает JS-скрипт на Mac OS?

Почему некорректно работает JS-скрипт на Mac OS?

При написании скрипта на плавное прокручивание блоков сайта (По-типу fullpagejs) возникла проблема

83