我正在尝试在JavaScript中执行以下操作:
var gete = document.getElementById;
但是我收到以下错误(来自FireBug的控制台):
uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost:8080/im_ass1/ :: anonymous :: line 15" data: no
]
现在显然我可以按如下方式包装函数:
var gete = function (id) {
return document.getElementById(id);
};
但是,在将该函数分配给另一个名称时,我得到上述异常的原因是什么?
答案 0 :(得分:5)
要在Firefox和Google Chrome中调用document.getElementById
的别名,您应按以下方式执行此操作:
var gete = document.getElementById;
gete.call(document, 'header').innerHTML = 'new';
您可能需要查看以下Stack Overflow帖子,了解详细说明:
答案 1 :(得分:4)
ECMAScript 5引入了bind()
函数,该函数将函数与对象绑定,以便可以直接调用它,而无需为每次调用使用func.call(thisObj)
。
var func = document.getElementById.bind(document);
func("foo"); // We don't have to use func.call(doument, "foo")
bind()
首先在Prototype库中提供,后来又添加到该语言中。
答案 2 :(得分:1)
如果您愿意,您可以绑定或致电或申请,或者您可以直接分配该功能, 正如你所观察到的那样 -
var gete= function(s){return document.getElementById(s)}
但为什么不改善它,或者有什么用?
var gete= function(s){return s && s.nodeType==1? s: document.getElementById(s)}