在闭包中,无法使用数组的length属性? 财富值57

2016-10-19 17:33发布

如下列示例代码:
我本意,是想封装一个页面的对象,对外提供一个getWidgetLength()的公共方法,打印控件数量。
但是在闭包当中,竟然没办法获取数组.length的值,跪求各位大神指教!

<!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">         <title></title>     </head>     <body>         <script type="text/javascript">             var PageObj = (function(){                 //私有属性:页面的控件名集合                 var widgetNames; //一开始没有实例化                 function initPage(){                     //调用公共的Util包,它给我返回的,竟然是一个Map (- -!!!                     //widgetNames = WidgetUtil.getAllWidget();                     widgetName = {"001":"loginName","002":"loginPwd","003":"loginCode","004":"loginBtn","005":"clearBtn"};                 }                                  return {                     //公共方法:打印页面控件的数量                     widgetLength : function(){                         try{                             //求解:widgetName不能使用length、shift()、slice()等属性/方法,                             console.info(widgetNames.length);                             }catch(e){                             console.error(e);                         }                     }                 }             })();                          PageObj.widgetLength();//调用         </script>     </body> </html>

补充说明:

  1. 非常抱歉,示例确实存在代码拼写错误:应该是console.info()

  2. 经过检查项目代码发现,我遇到的实际问题是: Object对象的length如何获取? (大神们,你们有没有封装获取对象length的通用方法?不管Array、Object都能得到他的item数量)


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答

可以这样写,(你给的源码有错误,需要修改)

mishen - whatsns产品经理
2楼-- · 2016-10-19 17:41

我能想到的就是for in轮询一次然后每次执行代码的时候计数器自增

帮你改好了。

最关键的问题在于;
1.initPage函数没被调用,所以widgetNames并没有被初始化
2.在initPage里面,widgetNames被初始化成了一个obj,而不是array,但是obj并没有length属性!!

duoyuan120
5楼-- · 2016-10-19 17:49

你的代码里面有很多问题,拼写的问题和用法的问题:

一周热门 更多>