JS: Погружаясь в классы
Теория: Позднее связывание
Для понимания того, как соотносятся друг с другом внутренности классов, которые связаны наследованием, нужно разобраться с таким понятием как позднее связывание (late binding).
Вспомним базовый класс HTMLElement из прошлого урока. Внутри него активно используется this для обращения к свойствам:
Предположим, что мы создаем объект класса HTMLAnchorElement (который наследует HTMLElement). Тогда объектом какого класса будет this внутри методов родительского класса? Правильный ответ: HTMLAnchorElement, то есть того класса, объект которого мы прямо сейчас создаем. Посмотрите на пример:
Эта особенность this называется поздним связыванием. Оно означает, что на момент определения класса, тип this неизвестен. В качестве текущего объекта может выступать объект любого класса, наследуемого от текущего. Все выглядит так, как будто весь код внутри базового класса скопировали и перенесли в каждый класс-наследник. Для позднего связывания не важно, насколько глубокая иерархия наследования. this всегда будет объектом того класса, который конструируется в коде.
Позднее связывание — важный элемент в работе наследования. Без него взаимодействие классов стало бы значительно сложнее и ограниченнее. Каждый объект должен был бы наверняка знать, к какому классу конкретно относятся свойства и методы в цепочке наследования. Понадобился бы специальный синтаксис для доступа к ним.




