![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| rene |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
Задача: обеспечить вызов сначала метода-конструктора унаследованного объекта-конструктора,
а затем собственного метода-конструктора. В случае, если объект-конструктор не наследует другой объект-конструктор не пытаться вызывать коструктор прототипа. Есть два объекта-конструктора А и B. Каждый из них содержит в себе публичный метод "construct", который вызывается при создании экземпляра объекта-конструктора с параметром "id", то есть:
приведёт к тому, что при создании "b" вызовется метод конструктора "construct". А если унаследовать "А"
, то нужно вызвать метод-конструктор "А", а зетем свой собственный метод-конструктор. Сделал вот так, но работает только в Мозилле, так как в ней есть свойство "constructor.name":
Как быть? Это сообщение отредактировал(а) rene - 1.8.2007, 09:54 |
||||||
|
|||||||
| rene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
Вот так работает всюду, но как-то неизящно:
Это сообщение отредактировал(а) rene - 1.8.2007, 10:10 |
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
rene,
внутри функции B вызвать:
первую строчку естесственно вызывать при наличии таковой функции в прототипе (с проверкой), иначе только вторую. Если же идея в том, чтобы привязаться к this, то сразу же при входе в функцию B (ещё до заведения собственных слотов):
а потом уже завести собственный construct и вызвать. Или я не понял затею? |
||||
|
|||||
| rene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 31.10.2006 Где: г. Висагинас, р. Литва Репутация: нет Всего: нет |
конгениально
да, идея была сделать это через "this". но оба решения мне нравятся. спасибо. >ещё до заведения собственных слотов ага, значит потом метод перезапишется собствененным методом "construct" B? |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Скорее не перезапишется, а затенит/закроет наследуемый метод с тем же именем. Сначала, ввиду отсутствия явно заданного слота, объект b не может обработать сообщение и делегирует его своему прототипу (тому который создан через new A). Потом вы заводите явный слот, в следующий раз сообщение будет обработано уже самим получателем. А в вашем последнем примере беда в том, что, вызывая this.constructor() вы перезаписываете (именно перезаписываете) собственные слоты объекта b, потому что он передаётся в A контекстной переменной. В результате одна и та же функция будет жить и в объекте и в его прототипе, проверим:
|
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |