javascript - 非法调用 document.querySelector

标签 javascript dom

<分区>

Possible Duplicate:
JavaScript function aliasing doesn't seem to work

相关的 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"

最佳答案

问题出在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 绑定(bind)到文档:

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

关于javascript - 非法调用 document.querySelector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12637061/

相关文章:

javascript - 在 react-konva 中更改 Hover 上的光标

javascript - 将 DOM 节点移动到弹出窗口

php - 如何使用简单的 dom html 从后台 url 返回链接?

javascript - 确定新站点用户的最佳方法 - Django

javascript - 上传文件大小限制为 32kB,我收到错误 "CGI.pm: Server closed socket during multipart read (client aborted?)."

javascript - JQuery 为多个选择器设置同一个事件

javascript - document.querySelector 是如何实现的?

javascript - 在不同的表单中使用输入文件元素

javascript - Jupyter:将单元格移动到笔记本顶部

javascript - "use strict"是否适用于在严格范围内声明的函数?