彩票走势图

JavaScript 函数直接量在FF引发的错误

原创|其它|编辑:郝浩|2009-07-08 10:33:06.000|阅读 457 次

概述:JavaScript 函数直接量在FF引发的错误,写了一个动态添加或删除元素的方法。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

写了一个动态添加或删除元素的方法 ,如下:

 1function childNodeAction(actionType,parentNode,childNode)
 2{
 3  if(!parentNode)
 4 {return; }
 5   
 6
 7  parentNode=typeof parentNode==='string'?getElement(parentNode):parentNode;
 8  childNode=typeof childNode==='string'?getElement(childNode):childNode;
 9  if(!parentNode || !childNode)
10  {return;}
11 
12  var action=actionType.toLowerCase();
13  ifnull==actionType || action.length<=0 || action=='append')
14  {
15   action='parentNode.appendChild';
16  }

17  else
18  {
19   action='parentNode.removeChild';
20  }

21
22  try
23  {
24    ;
25  }

26  catch($e)
27  {
28    alert($e.message);    
29  }

30}

 

其中的局部变量 action 在根据传入的动作类型分别初始化为 parentNode.appendChild和parentNode.removeChild 的字符串形式。

而实际上,这二个都是一个DOM函数。只不过,我这里,把函数名以字符串的形式赋给action.

在接下来,调用action时,使用了eval来执行对应的函数。

上面这段代码在IE下执行没有任何问题,但是,在FF下,却报:Illegal operation on WrappedNative prototype object 的异常。

到网上搜寻一番,原来,把函数指针直接赋给某个变量(也就是函数直接量)再执行的话,在FF下确实会报这个异常。

变通方法,就是创建一个匿名方法,并将其赋给action变量。如下:

 1function childNodeAction(actionType,parentNode,childNode)
 2{
 3  if(!parentNode)
 4  {return; }
 5   
 6 
 7  parentNode=typeof parentNode==='string'?getElement(parentNode):parentNode;
 8  childNode=typeof childNode==='string'?getElement(childNode):childNode;
 9  if(!parentNode || !childNode)
10  {return;}
11  
12  var action=actionType.toLowerCase();
13  ifnull==actionType || action.length<=0 || action=='append')
14  {
15    action=function(childNode){parentNode.appendChild(childNode);}
16    //action='parentNode.appendChild';
17  }

18  else
19  {    
20    action=function(childNode){parentNode.removeChild(childNode);}
21    //action='parentNode.removeChild';
22  }

23 
24  try
25  {
26    //; sError in FF: 'Illegal operation on WrappedNative prototype object'   
27    action(childNode);
28  }

29  catch($e)
30  {
31    alert($e.message);    
32  }

33}

 

这样,这段代码在FF下的执行就没有任何问题了。

类似的情况还有:
var $=document.getElementById;
alert($("demo").innerHTML);

这段代码也会报一样的错误,变通方法 :
var $=function(obj){ return typeof obj==='string' ? document.getElementById(obj) : obj ;}

或者 document.$=document.getElementById

 

个人认为:在FF下是不能直接将函数指针指定赋予一个变量的 ?


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP