为什么这不起作用?
function foo() {
var g = document.getElementById;
g('sampleID');
}
Chrome中出现此错误:Uncaught TypeError: Illegal invocation
......在Firefox中:Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object"
虽然可以在IE9测试版中使用!!
答案 0 :(得分:5)
大多数浏览器都要求在原始对象(document.getElementById
)的上下文中调用document
方法。所以这会奏效:
function foo() {
var g = document.getElementById;
g.call(document, 'sampleID');
}
但是,这将在Internet Explorer 7及更低版本中失败,因为DOM方法不会从Function.prototype
继承。您的原始示例应适用于所有版本的Internet Explorer。
您也可以在支持它的浏览器或您提供Function.prototype.bind
的浏览器中使用compatibility implementation:
function foo() {
var g = document.getElementById.bind(document);
g('sampleID');
}