JavaScript函数混叠似乎不起作用我只是在看书这个问题我想尝试一下别名方法,而不是函数包装方法,但我似乎无法让它在Firefox 3、3.5beta4或GoogleChrome中工作,无论是在它们的调试窗口中还是在测试网页中。萤火虫:>>> window.myAlias = document.getElementByIdfunction()>>> myAlias('item1')>>> window.myAlias('item1')
>>> document.getElementById('item1')<div id="item1">如果我把它放在网页中,调用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]Chrome(插入>是为了清晰起见):>>> window.myAlias = document.getElementByIdfunction getElementById() { [native code] }>>> window.myAlias('item1')
TypeError: Illegal invocation>>> document.getElementById('item1')<div id=?"item1">?在测试页面中,我得到了同样的“非法调用”。我做错什么了吗?还有人能复制这个吗?而且,奇怪的是,我刚刚尝试了,它在IE8中工作。
3 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
>>> $ = document.getElementById getElementById()>>> $('bn_home')[Exception... "Cannot modify properties of a WrappedNative" ... anonymous :: line 72 data: no] >>> $.call(document, 'bn_home')<body id="bn_home" onload="init();">
function makeAlias(object, name) { var fn = object ? object[name] : null; if (typeof fn == 'undefined') return function () {} return function () { return fn.apply(object, arguments) }}$ = makeAlias(document, 'getElementById');>>> $('bn_home')<body id="bn_home" onload="init();">
bind
>>> $ = document.getElementById.bind(document)>>> $('bn_home')<body id="bn_home" onload="init();">
喵喵时光机
TA贡献1846条经验 获得超7个赞
window
document
window.myAlias = document.getElementById
使用包装器(Fabien Ménager已经提到) 或者你可以用两个别名。 window.d = document // A renamed reference to the object window.d.myAlias = window.d.getElementById
添加回答
举报
0/150
提交
取消