Особенности механизма множественного наследования

В предыдущих примерах с фигурами не было никакой необходимости задумываться о списке аргументов, передаваемых классом Circle в конструктор класса Shape, потому что класс Circle построен непосредственно на базе класса Shape. Кроме того, имело смысл, и даже было удобно определить первые аргументы функции constructor класса Shape как первые аргументы функции constructor класса Circle. В последнем примере с классами Lion, Tiger и Liger функции constructor всех трех классов принимают единственный аргумент, который во всех трех случаях имеет одно и то же назначение, поэтому и здесь не возникало никаких проблем.
Но, минутку, а как следовало бы поступить, если бы функции constructor классов Tiger и Lion имели различные сигнатуры? Например, функция constructor класса Tiger могла бы принимать в качестве аргументов не только имя, но и количество полосок, а функция constructor класса Lion могла бы принимать имя и длину гривы. Как тогда следует определить функцию constructor класса Liger, чтобы она обрабатывала такую ситуацию? Все аргументы, что передаются функции constructor класса Liger, будут переданы функциям constructor классов Tiger и Lion, а в этом нет никакого смысла.

В данном конкретном случае, когда конструкторы двух или более суперклассов требуют передачи собственных аргументов, лучшее, что можно было бы сделать, – это передавать именованные параметры в виде ассоциативного массива и использовать эти параметры в своей функции constructor, не полагаясь на список аргументов в свойстве arguments.


Передача специфических параметров конструкторам супер классов при использовании множественного наследования еще недостаточно хорошо поддерживается в версии Dojo 1.1, хотя проблему согласования аргументов предполагается решить в одной из последую
щих версий.

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
JavaScript – это не Java
Вызов унаследованных методов
Имитация классов с использованием средств Dojo
Множественное наследование посредством смешивания классов
Наследование в JavaScript