LINUX.ORG.RU

Не пойму смысл кода

 ,


0

1

Читаю тут исходники nodejs, и наткнулся на это

function Immediate() { }

Immediate.prototype.domain = undefined;
Immediate.prototype._onImmediate = undefined;
Immediate.prototype._idleNext = undefined;
Immediate.prototype._idlePrev = undefined;

...
https://github.com/nodejs/node/blob/master/lib/timers.js

Не пойму, зачем они сеттят поля прототипа в undefined? Допустим, они вызывают внутри setImmediate new Immediate. Так почему бы не положить все эти свойства непосредственно в созданный объект, зачем прототип менять каждый раз?



Последнее исправление: aboutcard (всего исправлений: 1)

ПНХ со старта

anonymous
()

Видимо потому, что при создании объекта из прототипа в объекте часто будут отсутствовать содержимое каких-либо полей. Т.е. поле существует, но в нём ничего не будет храниться. Часть полей заполняется по мере работы кода. Часть - остаётся «пустыми». Зачем? Ну, стиль написания такой. Скажем так, это «явное» написание кода. Сначала делаем поля пустыми, и только затем заполняем их, это более наглядно, нежели создавать поля в ветлениях программы.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Они потом, при инициализации, назначают свойства, которые в прототипе, как свойства самого объекта. То есть, прототип они вообще не трогают. Если даже хотят явно, это достаточно было сделать один раз. Они же перезаписывают прототип при каждом вызове new Immediate. Это, таки, странно.

aboutcard
() автор топика
Ответ на: комментарий от aboutcard

Никто не перезаписывает прототип каждый вызов конструктора, смотри внимательнее.

А по сабжу: возможно дело в hidden class'ах. Кстати, если смотреть blame, то добавлены они за раз и взамен immediate = {}.

loyd
()
Ответ на: комментарий от aboutcard

Они же перезаписывают прототип при каждом вызове new Immediate

В каком месте?

no-such-file ★★★★★
()

Обрати внимание: строки с присваиванием undefined находятся вне конструктора.

xenohunter
()
Ответ на: комментарий от anonymous

ЯП с undefined и null одновременно ущербен по определению.

Это один из самых незначительных грехов яваскрипта.

ovk48 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.