2013-04-17 3 views
2

Почему я не могу клонировать функцию в javascript, назначая ее другой переменной?javascript: клонировать функцию, назначая ее переменной

например: попытка

var $ = document.getElementById; 


Использование:

typeof $; //--> "function" 
$('nav'); //--> "TypeError: Illegal invocation" 


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

ответ

4

При назначении переменной document.getElementById переменной вы теряете часть this === document, которую вы обычно имели при вызове метода document. Чтобы избежать этого, используйте .bind() явно установить this контекст функция использует:

var $ = document.getElementById.bind(document); 
+0

'связывания()' имеет ограниченную совместимость, это стоит отметить. – VisioN

+1

В любом браузере он может быть закреплен. На сайте MDN, с которым я связан, даже есть код для копирования и годного для этого. – ThiefMaster

+2

Стоит упомянуть, что bind вернет новую функцию (привязанную копию), а присвоение переменной просто создает ссылку. – bfavaretto

Смежные вопросы