可能重复:
JavaScript函数别名似乎不起作用
相关jsfiddle:http://jsfiddle.net/cWCZs/1/
以下代码完美运行:
var qs = function( s ) {
return document.querySelector( s );
};
qs( 'some selector' );
Run Code Online (Sandbox Code Playgroud)
但以下不是:
var qs = document.querySelector;
qs( 'some selector' ); // Uncaught TypeError: Illegal invocation
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.
我的困惑来自于这样的事实:
function t() {
console.log( 'hi' );
}
var s = t;
s(); // "hi"
Run Code Online (Sandbox Code Playgroud)
Zir*_*rak 33
问题在于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
Run Code Online (Sandbox Code Playgroud)
querySelector不是通用方法,它不接受另一个this值.因此,如果您需要快捷方式,则必须确保将querySelector其绑定到文档:
var qs = document.querySelector.bind( document );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2375 次 |
| 最近记录: |