Javascript-Mozilla和IE中的一个函数直接量的问题

王朝html/css/js·作者佚名  2006-07-13
窄屏简体版  字體: |||超大  

我在这里写这个也是写点在做js时遇到的问题,当个笔记.没有想到被hax "批"了一顿,不过也是说得有些道理的.毕竟这个内容也不痛不痒的

一般情况下,我们在JS中用函数直接量来命名一个简单的函数。

<script type="text/javascript">

var func=function(s){window.alert(s)};

func("never-online")

</script>

这在IE或者Mozilla中也是合法的(ECMA标准中有函数直接量的定义)。

但是IE中还有另外一种更简单的命名方式可以简化我们的代码:

<div id="demo">http://blog.never-online.net</div>

<script type="text/javascript">

var $=document.getElementById;

alert($("demo").innerHTML);

</script>

而这在Mozilla中没有报语法错误,而是抛出了一个异常, 操作符非法:

下面代码是捕获Mozilla抛出的异常并打印出来

<div id="demo">http://blog.never-online.net</div>

<script type="text/javascript">

var $=document.getElementById;

try {

alert($("demo").innerHTML);

} catch(ex) { document.write(ex)}

</script>

异常内容为:

[Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Temp/non4A.htm :: :: line 22" data: no]

现在还不知道能不能在Mozilla的config中设置,总之写代码的时候要注意.

我在google上搜索 getElementById 0x8057000c 关键字,还是有很多类似的情况,比如

http://groups.google.co.uk/group/comp.lang.javascript/browse_thread/thread/65a1a23f5dd7c9ad/d264d04d9d768b28?tvc=2#d264d04d9d768b28

没有更好的解决办法,但是可以变通,比这样写

<div id="foo"></div>

<script>

document.$ = document.getElementById;

alert(document.$("foo").innerHTML);

</script>

因为js可以动态的给对象增加属性和方法,上面的例子在ie和moz中测试都可以通过.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航