讲个睡前故事吧,不动脑筋的那种。
firebug是个很好的东西,可以用console.log来打印日志。可是用过log4j的人会觉得它烦…没有线程进程号(唔,这个倒也合理,javascript总共就一个线程)也就算了,但能说因此就不需要时间了吗?换成下面的函数好了:
function log(msg) {
var d = new Date();
console.log("%s:%s:%s",
("0" + d.getHours()).slice(-2),
("0" + d.getMinutes()).slice(-2),
("0" + d.getSeconds()).slice(-2),
msg);
}
为了防止”2:3:4″这样的时间也被打印出来,采用了(“0″ + d.getHours()).slice(-2)这样的方法。如果小时数本来就有两位,那么第一个0就算是白加,不过这正是我们想要的结果。
Firebug的log比较sweet的地方是,它支持”%s”语法,不过多余的就别想了,比如字段宽度神马的。
第二个故事是,以前的贴子讲过很多的陈年旧事了…Javascript跟时间有关的那些事…这世上最重要的就是时间,时机,时序,时态这些事了。如果事件B必须在事件A之后才能发生,前面的贴子讲过,可以用dojo.Deferred来解决。不过如果此刻手边没有dojo这件兵器呢?或者不想牛刀杀鸡(其实是直线式编程模式习惯了的托辞)呢?
在某些特殊的初始化场景下,比如在函数一开头就要等待某件事发生,判断它出现后才继续执行下面的代码,这种情况下,也有比较简单的办法。
function run(){
if (!init()){
setTimeout(run, 500);
return;
}
// ready to go! The rest of my code
}
不过要注意这里init可能会被调用多次,所以还要做保护。另外run函数可能是被计时器调用的,所以要小心当时的执行环境什么的。