我只是在阅读这个问题并且想尝试别名方法而不是函数包装方法,但我似乎无法在它们的调试窗口和Firefox 3或3.5beta4或Google Chrome中使用它们.在测试网页中.
萤火虫:
>>> window.myAlias = document.getElementById
function()
>>> myAlias('item1')
>>> window.myAlias('item1')
>>> document.getElementById('item1')
<div id="item1">
Run Code Online (Sandbox Code Playgroud)
如果我把它放在一个网页中,对myAlias的调用会给我这个错误:
uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///[...snip...]/test.html :: <TOP_LEVEL> :: line 7" data: no]
Run Code Online (Sandbox Code Playgroud)
Chrome(为了清晰起见插入了>>>):
>>> window.myAlias = document.getElementById
function getElementById() { [native code] }
>>> window.myAlias('item1')
TypeError: Illegal invocation
>>> document.getElementById('item1')
<div id=?"item1">?
Run Code Online (Sandbox Code Playgroud)
在测试页面中,我得到了相同的"非法调用".
难道我做错了什么?其他人可以重现这个吗?
另外,奇怪的是,我只是尝试了它在IE8中工作.
例如,如果我这样做:
var q = document.querySelectorAll;
q('body');
Run Code Online (Sandbox Code Playgroud)
我在Chrome中收到"非法调用"错误.我想不出为什么这是必要的任何理由.首先,并非所有本机代码功能都是如此.事实上我可以做到这一点:
var o = Object; // which is a native code function
var x = new o();
Run Code Online (Sandbox Code Playgroud)
一切正常.特别是在处理文档和控制台时我发现了这个问题.有什么想法吗?
以下作品:
$ = document.form;
x = $.name.value;
Run Code Online (Sandbox Code Playgroud)
这不是:
$ = document.getElementById;
x = $("id").value;
Run Code Online (Sandbox Code Playgroud)
关于为什么这不起作用或如何做到这一点的任何想法?