Подтвердить что ты не робот

Недопустимый вызов с помощью document.querySelector

Возможный дубликат:
Наложение псевдонимов JavaScript не работает

Связанный jsfiddle: http://jsfiddle.net/cWCZs/1/

Следующий код работает отлично:

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

Но следующее:

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

Я не понимаю, почему.

Моя путаница связана с тем, что это работает:

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

Ответ 1

Проблема заключается в значении 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 не является общим методом, он не примет другое значение this. Итак, если вам нужен ярлык, вы должны убедиться, что ваш querySelector привязан к документу:

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