2012-09-28 16 views
11

Eventuali duplicati:
JavaScript function aliasing doesn't seem to workinvocazione illegale con document.querySelector

jsfiddle correlati: http://jsfiddle.net/cWCZs/1/

Il seguente codice funziona perfettamente:

var qs = function(s) { 
    return document.querySelector(s); 
}; 
qs('some selector'); 

Ma non segue:

var qs = document.querySelector; 
qs('some selector'); // Uncaught TypeError: Illegal invocation 

Non capisco perché.

mia confusione deriva dal fatto che questo funziona:

function t() { 
    console.log('hi'); 
} 
var s = t; 
s(); // "hi" 

risposta

21

Il problema sta nel valore this.

//in the following simile, obj is the document, and test is querySelector 
var obj = { 
    test : function() { 
     console.log(this); 
    } 
}; 

obj.test(); //logs obj 

var t = obj.test; 
t(); //logs the global object 

querySelector non è un metodo generico, non accetterà un altro valore this. Quindi, se si desidera creare un collegamento, è necessario assicurarsi che il proprio querySelector è legato al documento:

var qs = document.querySelector.bind(document); 
+1

Oh, questa è una soluzione un modo migliore di duplicato. –

Problemi correlati