当我们尝试使用直接引用调用文档对象方法时,例如:var kk = document.getElementById;kk(

when we try to call document object methods with direct refrence ex: var kk = document.getElementById; kk("someid") gives error?

本文关键字:kk var 例如 getElementById document 方法 对象 我们 文档 调用 引用      更新时间:2023-09-26
var kk = document.getElementById;
kk("some_id");  // gives Uncaught TypeError: Illegal invocation in chrome

但是,如果我们对用户定义的对象执行相同的操作,则可以正常工作。

var obj = {
    some_function : function(a){
        alert(a);
    }
};
var kk = obj.some_function;
kk("hello");  // works

此错误的原因是什么。 我刚刚在谷歌浏览器中检查了一下,它不起作用,当我通过 var $id = document.getElementById;document.getElementById 创建一个简短版本时遇到了这个问题,但它不起作用。 有趣的是,这里$id === document.getElementById;(真)和typeof $id是函数。

是因为某些安全原因还是什么?对不起,英语很弱,我什至不擅长为问题做好的标题。感谢您的回答。

使用 Function.prototype.bind()。它将上下文绑定到文档。

var kk = document.getElementById.bind(document);