#javascript
#javascript
Вопрос:
Как объявлено здесьhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
Избегайте его использования и, по возможности, обновите существующий код; смотрите таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Какова альтернатива для такого отражения?
Комментарии:
1. В основном говорю: альтернатив НЕТ.
2. Хорошо спроектированной функции должна быть передана необходимая информация (либо в качестве аргумента, либо
this
-«аргумент»).3. Я не думаю, что она есть, в любом случае, это запах кода. Функции не нужно ничего знать о своем вызывающем устройстве.
4. @JohnMontgomery нет, если вы хотите выполнить генерацию кода
5. Возможно, вы сможете найти обходные пути для каждого использования в каждом конкретном случае. У вас есть пример?
Ответ №1:
Вызывающий должен передать любую информацию, необходимую для обратного вызова
Консенсус по таким функциям, как caller, заключается в том, что они пахнут кодом. Вам нужно передать дополнительную информацию, если функция обратного вызова должна что-то знать о своем контексте.
function doStuff() {
console.log("caller is" doStuff.caller);
}
function doStuffWithoutCaller(context) {
console.log("additional context is: " context);
}
<button onclick="doStuff()">
Caller
</button>
<button onclick="doStuffWithoutCaller('buttonClick')">
Without caller
</button>
На самом деле очень маловероятно, что поставщики браузеров выбьют ковер из-под вас.