2012-03-15 9 views
2

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

grab = window.document.getElementById; 
grab("blueBox") // i.e. grab("blueBox").onclick [...] 

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

Я использую последнюю версию браузера Firefox

+0

Это не работает, что я могу делать неправильно? – rubixibuc

+0

'document.getElementById' является ** хостом ** функцией. Родные функции - это встроенные модули (такие как Array, Object и т. Д.) И любая функция, созданная кодом ECMAScript (например, 'function foo() {...}', 'var bar = function() {...}'). – RobG

+1

Возможный дубликат функции JavaScript для сглаживания не работает] (http://stackoverflow.com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work) –

ответ

3

То, как вы делаете это испортит присвоение значения this для функции.

grab = window.document.getElementById; 
grab("blueBox") // i.e. grab("blueBox").onclick [...] 

здесь this будет global объект. Попробуйте:

grab.apply(window.document, ["blueBox"]) 

или в новых браузерах:

grab = window.document.getElementById.bind(window.document); 

получить непосредственно определить, что this будет.

+0

perfect, Thank you :-) – rubixibuc

+1

@ Yoshi-Ничего, что делать с областью видимости, все, что связано с ключевым словом функции * this *. – RobG

+0

@RobG. Вы правы, это очень плохая привычка, когда я всегда стараюсь объяснить эту формулировку. ;) – Yoshi

1
function grab(id) { 
    return window.document.getElementById(id); 
} 

grab("blueBox"); 
1

Первым шагом здесь всегда является консоль JavaScript. Firebug - твой друг. Сообщите нам сообщение об ошибке, если это ничего не значит для вас.

В то же время, здесь есть обходной путь:

var grab = function(id) { return window.document.getElementById(id); } 
0

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

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