25

重複の可能性:
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"
4

1 に答える 1

54

問題は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 );
于 2012-09-28T09:22:32.197 に答える