2012-03-15 2 views
2

J'ai écrit ce code (ceci est un extrait) qui ne semble pas fonctionner. Je l'ai isolé à ici.Javascript créant des références aux fonctions natives

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

Est-il possible de créer des références à la fonction native en javascript. Je fais quelque chose avec l'élément saisi, je l'ai juste laissé par exemple. La fonction grab ne semble pas fonctionner.

J'utilise la plus récente version FireFox

+0

Ça ne marche pas, qu'est-ce que je pourrais faire de mal? – rubixibuc

+0

'document.getElementById' est une fonction ** host **. Les fonctions natives sont les built-ins (comme Array, Object, etc.) et toute fonction créée par le code ECMAScript (par exemple 'function foo() {...}', 'var bar = function() {...}'). – RobG

+1

duplication possible de [JavaScript aliasing de la fonction ne semble pas fonctionner] (http://stackoverflow.com/questions/1007340/javascript-function-aliasing-doesnt-seem-to-work) –

Répondre

3

La façon dont vous le faites gâchera l'affectation de la valeur this pour la fonction.

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

ici this sera l'objet global. Essayez:

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

ou dans les navigateurs les plus récents:

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

pour obtenir directement définir ce que this sera.

+0

parfait, merci :-) – rubixibuc

+1

@ Yoshi-Rien à voir avec la portée, tout à voir avec le mot-clé * this * de la fonction. – RobG

+0

@RobG Vous avez raison, c'est une très mauvaise habitude à moi de toujours mélanger le libellé en essayant de l'expliquer. ;) – Yoshi

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

grab("blueBox"); 
1

La première étape ici est toujours la console JavaScript. Firebug est votre ami. Dites-nous le message d'erreur si cela ne signifie rien pour vous.

En attendant, voici une solution:

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

La raison est parce que la fonction getElementById n'est pas appelée comme méthode de document, de sorte que son ce mot-clé ne fait pas référence le droit objet. En utilisant appel comme suggéré dans d'autres réponses montre que lorsque ce fait référence au document, getElementById fonctionne.

Questions connexes