今天要进行一些输出,先介绍一下我最喜欢的Dojo的Console,如果在IE中调试Dojo的代码就非常方便了,只要的页面中加上
<script type="text/javascript"> djConfig = { isDebug: true, parseOnLoad: true }; </script>
isDebug: true,在页面中就可以看到Dojo的console了,Dojo1.3中的console稍稍和以前有点儿不一样,多了一些功能键,样式风格看起来是在模仿FireBug,好像越来越智能了。
有了Console,就方便多了,我们能把要输出的内容用console来输出,可以不用总是alert了。
Dojo console中常用的输出有四种级别:
console.log("This is console.log!"); console.info('This is console.info!'); console.warn('This is console.warn!'); console.error('This is console.error!');
看一下效果
dojo的console是怎么实现的呢? 在 dojo.js 里面有这样一段代码:
function() { if (typeof this["loadFirebugConsole"] == "function") { this["loadFirebugConsole"](); } else { this.console = this.console || {}; var cn = ["assert", "count", "debug", "dir", "dirxml", "error", "group", "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", "trace", "warn", "log"]; var i = 0, tn; ..... } }
从这里看到 dojo 实际上是调用的是 Firebug 的console,这样看来 Firebug console 的属性在dojo里面都可以使用,Firebug console 属性参考:http://getfirebug.com/console.html,好了,这样就准备的差不多了,下面继续。
JavaScript中要遍历一个数组,通常情况下我们会这样做:
var arr = new Array("test", 123, 555); for(var i=0; i<arr.length; i++) { alert(arr[i]); }
Dojo为数组对象提供了迭代器,举一个简单的例子:
var arr = new Array("test", 123, 555); dojo.forEach(arr, function(elt, idx, array){ alert(idx + " - " + elt + " - " + array); });
效果
这样不用写for循环了,很简单吧。
来看一下 dojo API 中对 forEach() 方法的定义:
var foo=dojo.forEach(arr: Array|String, callback: Function|String, thisObject: Object?);
解释一下 forEach(arr,callback,thisObject) 方法的参数:
API中给出了三个实例代码:
第一个例子
// log out all members of the array: dojo.forEach( [ "thinger", "blah", "howdy", 10 ], function(item){ console.log(item); } );
第一个例子很简单,就是遍历了给定的数组,然后将数组中的元素挨个输出。
第二个例子
// log out the members and their indexes dojo.forEach( [ "thinger", "blah", "howdy", 10 ], function(item, idx, arr){ console.log(item, "at index:", idx); } );
第二个例子输出了每个元素在数组中的位置。
第三个例子
// use a scoped object member as the callback var obj = { prefix: "logged via obj.callback:", callback: function(item){ console.log(this.prefix, item); } }; // specifying the scope function executes the callback in that scope dojo.forEach( [ "thinger", "blah", "howdy", 10 ], obj.callback, obj );
通过这个例子我们可以理解forEach()第三个参数的含义了,遍历给定数组,传入 obj 对象,调用obj对象的callback方法来来处理遍历后的函数。