Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Откуда вызвана функция |
Автор: Aver78 21.1.2020, 16:49 |
Есть json объекты такого типа: a = { func1() { alert('Как тут получить имя объекта вызвавшего функцию, в данном случае, - b ?') } } b = { func2() { a.func1(); } } P.S. Понятно дело не передавая имя объекта в параметрах функции. |
Автор: _zorn_ 22.1.2020, 16:37 |
Никак. Адекватными методами. А из неадыкватных можно попробовать бросить исключение и прогуляться по стектрейсу. Но хз возможно ли это в js И это не json объекты. json объект это строка типа {"bla":"blabla"} которую можно превратить в обычный объект используемого ЯП. PS: JavaScript Object NOTATION PPS. Да и "json объект" звучит как "АвтоВАЗ" - "Автомобильный Волжский Автомобильный Завод" |
Автор: _zorn_ 22.1.2020, 16:57 | ||
Хотя можно "имя" не передавать, а замутить `bind` или `call` Тут уж сам решай https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/call Что то типа того
Только сразу скажу, такой код начнет вонять через неделю ![]() |
Автор: Aver78 22.1.2020, 21:04 | ||||
Да хрен редьки не слаще. Я как раз хочу избежать повторения в вызове функции одного и того-же много раз. А тут получаются то-же самое извращение, только с подвывертом. Добавлено через 14 минут и 24 секунды
Как то ни разу не озаботился тем что бы расшифровать эту аббревиатура . Как пройтись по стеку я не понял. Я вообще, мягко говоря, не фанат js, и знания соответствующие. |
Автор: Aver78 25.3.2020, 13:37 | ||||
Так и не сумел найти ответа. Может быть вопрос решаем через автоподстановку параметра, хотя бы. Но я и это не могу придумать как сделать.
Для вызова a.func1 во всех объектах будет использована одна и та-же конструкция для задания параметра param1 - this.name. Как бы его прописать в функции изначально ? Такой вариант соответственно неверный, но возможно есть правильный ?
|
Автор: od0201 7.5.2020, 18:39 | ||||||
Не совсем понятно, зачем Вам имя объекта. Если Вы имели ввиду сам объект, который вызвал функцию, то так
Если в объекте b задать поле name, то в func1 сможете получить это поле => this.name Если Вы хотите выводить в Alert, то туда объект преобразуется в строку "[object Object]", а вот с this.name в Alert у Вас проблем не будет
|
Автор: Aver78 8.5.2020, 19:34 | ||||
При таком определении
Да, this приходит. А при таком
Нет. А мне нужно передавать в функцию параметры, что непонятно как сделать при первом варианте определения. Неправильно я отписался. func2 - это же не функция, а по сути, просто алиас для вызова Func1. А должна быть функция. И в тот момент когда она превращается в функцию - func1:function () {a.func1()} , то this в ней переопределяется на объект b. и откуда ее не вызови this будет один и тот же. |