当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript-Mozilla和IE中的一个函数直接量的问题

Javascript
用jQuery解决IE不支持的option disable属性
jQuery 源代码显示控件 (Ajax加载方式).
JS backgroundImage控制
jQuery 性能优化指南 (1)
jQuery 性能优化指南(2)
jQuery 性能优化指南(3)
input+select(multiple) 实现下拉框输入值
javascript getBoundingClientRect() 来获取页面元素的位置的代码[修正版]
jQuery 图像裁剪插件Jcrop的简单使用
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
jquery(1.3.2) 斑马线效果代码
JQuery Jcrop 实现图片裁剪的插件
jquery img src 获取实现代码
javascript 历史记录 经常用于产品最近历史浏览
jquery tabs的实现代码
jQuery 剧场版 你必须知道的javascript
JavaScript 闭包深入理解(closure)
js 图片缩放(按比例)控制代码
广告切换效果(缓动切换)
javascript 用局部变量来代替全局变量

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 323 ::
收藏到网摘: n/a

一般情况下,我们在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中测试都可以通过.