document.getElementsByTagName的本地副本

Bri*_*ian 1 javascript getelementsbyname

为什么以下代码不起作用?

var f = document.getElementsByTagName;
var x = f('div');
Run Code Online (Sandbox Code Playgroud)

我在Chrome中遇到"TypeError:Illegal invocation",Safari中出现"TypeError:Type error".我没有在Firefox中收到错误,但它不起作用.我还没有在IE或Opera中进行测试.

Pet*_*sen 7

在Javascript中没有"绑定方法"这样的东西(借用Python中的术语,我希望你已经知道或解释可能需要更长).当您获取对"document.getElementsByTagName"的引用时,您只是获取对函数的引用,而不是与文档对象关联的方法.当你调用它时,"this"设置为窗口,而不是文档,所以它不起作用.

从技术上讲这样可以得到你想要的东西,但你可能会发现它毫无意义:

var x = f.call(document, 'div')
Run Code Online (Sandbox Code Playgroud)

(这是没有意义的,因为它的可读性较低,而且没有调用document.getElementsByTagName()那么快.使用闭包同样毫无意义.)