Я пытаюсь определить базовый класс в JavaScript, который выполняет множество общих функций при создании. Часть этой функции заключается в создании компонента и регистрации обработчиков обратного вызова для этого компонента.Как вы перекрываете привязки к цепочке конструкторов JS?
Проблема, с которой я столкнулась, заключается в том, как переопределить функцию, которая используется для этого обработчика обратного вызова в дочерних классах, которые расширяют мой базовый класс.
В конкретных терминах у меня есть компонент BasicPage
, который создает компонент Table
. BasicPage
также определяет функцию по умолчанию onRowClick
, которая регистрируется в недавно созданном Table
.
Теперь я хочу, чтобы создать PageWithSections
компонент, который расширяет BasicPage
(через call(..)
заявление) и подменяет onRowClick
. Проблема заключается в регистрации обработчика кликов, когда таблица выполняется внутри конструктора базового класса. Во время этой регистрации onRowClick
еще не был переопределен, поэтому ссылка на базовые классы onRowClick
.
Я создал jsBin, который иллюстрирует проблему.
http://jsbin.com/uDEjuzeQ/9/edit
Если щелкнуть на каждом поле один раз, в порядке, я хочу дисплей окно сообщения будет:
Нет сообщений; строка нажата; строка нажата; BasicPage onRowClicked; строка нажата; PageWithSections onRowClicked
Что такое правильный способ, чтобы переопределить функцию до конструктора цепи и привязать переопределенную функцию к чему-то в процессе построения базового объекта?
UPDATE Этот вопрос оригинальной ссылка на цепочке прототипов, но на самом деле эти прототипы фактически не используются в этом примере.
Вопрос был обновлен, чтобы отразить это. В конечном итоге это вопрос о позднем связывании.
На самом деле я не вижу наследования в [скрипке, которую вы опубликовали] (http://jsbin.com/uDEjuzeQ/9/edit). Где вас интересует цепочка прототипов? –
Cloudfeet указал на то же самое. Если вы можете предложить лучший заголовок, я его изменю. Я также изменю теги, связанные с этим сообщением. – Snekse
Я внес изменения в исходный вопрос. Я собираюсь оставить это открыто на некоторое время и наградить галочкой, на которую когда-либо отвечают, получает больше всего голосов. – Snekse