(function () {
var old_prompt = prompt;
prompt = function (msg) {
var tmp = old_prompt(msg);
hook(tmp);
return tmp;
};
prompt.restore = function () { prompt = old_prompt; }
// analogous for other functions you want to replace
})();
Оборачивая его в (самоисполняющуюся) функцию, вы гарантируете, что old_prompt
не попадет наружу.Вы должны разоблачить что-то , хотя.Я решил предоставить функцию, выполняющую восстановление, для удобства и, возможно, можно сказать, будущего и инкапсуляции.Пока функции высшего порядка воздерживаются от манипуляций с чьей-либо областью действия ...
Кроме того, нет, (я бы предположил) невозможно восстановить предыдущее значение переменной без какой-либо ссылки на нее (старое значение), даже если это значение является встроенным.Даже если бы это было возможно, это был бы довольно неясный трюк - этот способ работает, поэтому давайте просто придерживаться его.
(Кредит на func.restore
идет в Мартейн)