#javascript
Вопрос:
Допустим, у меня есть следующая функция:
function a() {
function b() {
console.log('b')
}
console.log('a')
b()
}
a()
Из внешней области, когда я вызываю function a()
, я получаю следующий результат
a()
> 'a'
> 'b'
Есть ли у меня какой-либо способ вызвать function b()
непосредственно из внешней области без изменения исходной функции? Из внешней области, к которой у меня есть только доступ a
. Что-то вроде этого:
a.b()
> 'b'
Мне нужно любое возможное грязное решение.
Комментарии:
1. Нет, ты не можешь. Это проблема XY ?
2. Невозможно без обновления функции. Одна из причин , по которой люди пишут функции таким образом, заключается в том, чтобы предотвратить их вызов извне.
3. @VLAZ Контекст заключается в том, что я использую
history
пакет npm, который отслеживает историю браузера в памяти, но не предоставляет историю разработчику. Мне нужен доступ к истории, и я предпочитаю не переписывать свою собственную реализацию, а использовать оригиналhistory package
. Хотя я полагаю, что ответ заключается в том, что вместо этого я должен просто клонировать их код.
Ответ №1:
Там нет ничего, на что можно было бы ссылаться b
после a()
запуска, поэтому оно полностью недоступно. В зависимости от того, какова конечная цель — в качестве очень грязного решения вы могли бы a.toString()
затем сбросить внутренние части в eval
.
Ответ №2:
Вы можете сделать это , если вернете ссылку на эту функцию a
, но вам придется ее изменить.
function a() {
function b() {
console.log('b')
}
console.log('a')
b()
return b;
}
const b = a()
b();
Комментарии:
1. » без изменения исходной функции »