Строго говоря, нет, это не представляется возможным, чтобы переопределить функцию JavaScript на всех. Хотя это своего рода вопрос семантики.
Функция может переписывать свою ссылку в пределах определенной области с помощью функции еще одной функции, которая служит в качестве ловкости рук, где вместо первой появляется функция. например
greet_once = function() {
console.log('Hello.');
greet_once = function() { console.log('Can I help you?') };
};
Аналогично функция может использовать состояние closured сферы по-разному ведут себя во второй раз его называют (явно не «переопределение»).
В следующем примере показано, почему приведенный выше шаблон не переопределяется, поскольку он зависит от родительской области, которая не может быть разделена с областью вызова.
greet_always = function() {
greet_once = function() {
console.log('Hello.')
greet_once = function() { console.log('Can I help you?') }
};
return greet_once()
}()
greet_always()
greet_always()
функция вызывается, как greet_always
(который всегда печатает «Hello».) Такой же один, присвоенный первоначально greet_once
.
Самый близкий, я считаю, что вы можете переопределить функцию, чтобы переназначить свои методы применения и вызова, что создает сценарий, в котором myFunction.call()
отличается от myFunction()
, что странно, но, возможно, полезно.
Я понятия не имею, можете ли вы или нет, но это не похоже на то, что нужно делать. Я, очевидно, не знаю, каковы ваши обстоятельства, но это звучит так, как будто у него большой потенциал для путаницы, трудно отслеживать ошибки и трудно читать код. Я бы много думал о том, является ли это правильным решением, или если вы хотите создать резервную копию шага и задать вопрос, который привел вас к этому в качестве ответа. Извините, если вы уже рассмотрели все варианты. Вы никогда не можете сказать, что у кого-то есть тогут об уже или нет ... – Chris
Для этого есть законное использование, и это мощная вещь. Люди боятся того, чего не знают, но это не значит, что они плохие. – galambalazs
Обратите внимание, что этот метод на самом деле не переопределяет функцию, она изменяет, к которой относится функция 'never_called_again'.Исходная функция не обязательно исчезает, учитывая, что (хотя вы этого не делаете) можно создать другую переменную, которая ссылается на исходную функцию: put 'original = never_called_again;' перед переназначением 'never_called_again' и' original () 'будет ссылаться на оригинал ... – nnnnnn