JavaScript:通过局部变量引用主机功能

时间:2011-02-06 23:07:19

标签: javascript

  

可能重复:
  JavaScript function aliasing doesn't seem to work

为什么这不起作用?

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测试版中使用!!

演示: http://jsfiddle.net/ugBpc/

1 个答案:

答案 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');  
}