Может ли функция JavaScript переименовать себя?

1

Я понимаю, что функцию можно легко скопировать в новую переменную, написав:

var wu = function() {
   // do stuff
)

var tang = wu;
var bee = tang;
// etc

и таким образом может пройти теоретически бесконечное число имен. Я также понимаю, что в приведенном выше примере я мог бы сказать var wu = undefined и ссылка будет удалена, но Im задается вопросом, может ли функция переименовать себя как часть своего собственного контекста? Смысл, могу ли я написать:

function wuTang() {
   // do stuff
   // rename self
}

wuTang(); // runs successfully
wuTang(); // returns undefined 

Я не беспокоюсь о процессе создания нового имени, я просто задаюсь вопросом, возможно ли это. Я не хочу вызывать вторую функцию для переименования исходной функции, я хочу, чтобы функция переименовывала себя, поэтому она может быть вызвана только одним именем.

  • 2
    Конечно, поставьте wuTang = undefined; в теле функции?
  • 0
    « так что оно может быть вызвано только данным именем один раз » - обратите внимание, что кем бы вы ни были, он всегда может сохранить ссылку на функцию перед вызовом.
Показать ещё 2 комментария
Теги:

1 ответ

2
window.wutang = function() {
  var f = window.wutang;
  window.watang = f;
  delete window.wutang;
}

Этого должно быть достаточно, чтобы "переименовать" себя :)

wutang(); // ok
wutang(); // fail
watang(); // should kill self :)
  • 0
    Не нужно делать это свойством window .
  • 0
    это можно сделать без свойства окна?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню