|
Модераторы: Sardar, Aliance |
|
Aver78 |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 185 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
Есть json объекты такого типа:
a = { func1() { alert('Как тут получить имя объекта вызвавшего функцию, в данном случае, - b ?') } } b = { func2() { a.func1(); } } P.S. Понятно дело не передавая имя объекта в параметрах функции. Это сообщение отредактировал(а) Aver78 - 21.1.2020, 20:09 |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Никак. Адекватными методами.
А из неадыкватных можно попробовать бросить исключение и прогуляться по стектрейсу. Но хз возможно ли это в js И это не json объекты. json объект это строка типа {"bla":"blabla"} которую можно превратить в обычный объект используемого ЯП. PS: JavaScript Object NOTATION PPS. Да и "json объект" звучит как "АвтоВАЗ" - "Автомобильный Волжский Автомобильный Завод" Это сообщение отредактировал(а) _zorn_ - 22.1.2020, 16:44 |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: 1 Всего: 12 |
Хотя можно "имя" не передавать, а замутить `bind` или `call`
Тут уж сам решай https://developer.mozilla.org/ru/docs/Web/J...s/Function/bind https://developer.mozilla.org/ru/docs/Web/J...s/Function/call Что то типа того
Только сразу скажу, такой код начнет вонять через неделю Это сообщение отредактировал(а) _zorn_ - 22.1.2020, 17:10 |
|||
|
||||
Aver78 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 185 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
Да хрен редьки не слаще. Я как раз хочу избежать повторения в вызове функции одного и того-же много раз. А тут получаются то-же самое извращение, только с подвывертом. Добавлено через 14 минут и 24 секунды
Как то ни разу не озаботился тем что бы расшифровать эту аббревиатура . Как пройтись по стеку я не понял. Я вообще, мягко говоря, не фанат js, и знания соответствующие. |
||||
|
|||||
Aver78 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 185 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
Так и не сумел найти ответа. Может быть вопрос решаем через автоподстановку параметра, хотя бы. Но я и это не могу придумать как сделать.
Для вызова a.func1 во всех объектах будет использована одна и та-же конструкция для задания параметра param1 - this.name. Как бы его прописать в функции изначально ? Такой вариант соответственно неверный, но возможно есть правильный ?
|
||||
|
|||||
od0201 |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 126 Регистрация: 16.1.2009 Репутация: нет Всего: 1 |
Не совсем понятно, зачем Вам имя объекта.
Если Вы имели ввиду сам объект, который вызвал функцию, то так
Если в объекте b задать поле name, то в func1 сможете получить это поле => this.name Если Вы хотите выводить в Alert, то туда объект преобразуется в строку "[object Object]", а вот с this.name в Alert у Вас проблем не будет
|
||||||
|
|||||||
Aver78 |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 185 Регистрация: 21.4.2007 Репутация: нет Всего: нет |
При таком определении
Да, this приходит. А при таком
Нет. А мне нужно передавать в функцию параметры, что непонятно как сделать при первом варианте определения. Неправильно я отписался. func2 - это же не функция, а по сути, просто алиас для вызова Func1. А должна быть функция. И в тот момент когда она превращается в функцию - func1:function () {a.func1()} , то this в ней переопределяется на объект b. и откуда ее не вызови this будет один и тот же. Это сообщение отредактировал(а) Aver78 - 8.5.2020, 19:57 |
||||
|
|||||
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |