记录引用的地址,方便后面dispose函数中释放
当然可以,老师这么写为了改变数组项方便后续方法调用
count表示的是遍历图片的计数器。这里指的是遍历完成如果计数为0.代表的是在for循环中没有进行count++;也就是说图片数组或对象images是一个空的。到这一步意也意味着图片加载完成,理所调用callback。
图片的加载是在doload()函数中,每个图片加载成功一次,--count。这里的count是图片真正加载成功的计数器。此时计数器减为0,意味图片全部加载完成。执行callback
所以你问的不是对数组遍历不成功,而是遍历的对象是空数组(或对象)
上面是个人理解的,不对的地方还望指正
执行下面三段代码,便会明白一些区别
var array=['a']; Array.prototype.test=function(){}; array.loady = 'ask'; /*标准的for循环*/ for(var i=0;i<array.length;i++){ alert(i); } ////// var array=['a']; Array.prototype.test=function(){}; array.loady = 'ask'; for(var i in array){ alert(i); } /////// var array=['a']; Array.prototype.test=function(){}; array.loady = 'ask'; for(var i in array){ if(!array.hasOwnProperty(i)){ continue; } alert(i); }
参照javascript权威指南的:使用for、in循环可以在循环体遍历对象中所有的可枚举的属性,也就是包括自有属性和继承属性,把属性名称赋值给循环变量;而hasOwnProperty方法可以用来检测给定的名字是否是对象的自有属性,通过以上两步筛选,可以筛选出对象具有的自有属性,也就是期望的格式object:{src:xxx}.我是新手,以上是我自己推断的,如有错误,见谅
window[item.id] 这一步是给window对象添加了一个item.id属性,而window是全局对象,item.id就是全局属性,全局属性就是全局变量,这个变量指向一个image类对象,如果不加这一步,创建的只是一个局部的image类对象,是不会对外部产生影响的。
images中是图片src对应的字符串,将images中的每一项变为一个对象方便后面操作,这个对象上挂载了对应的src,Image对象,id等信息,方便后来的操作
https://github.com/ustbhuangyi/animation
这是老师上传到github上面的例子,你clone下来就有源码和图片了。素材图片在demo目录下,rabbit-big.png,
rabbit-lose.png,rabbit-win.png。
可以参考这个回答:http://www.imooc.com/qadetail/142112
webstorm自带的功能,在方法的上方,输入/**,然后回车
同学你好,你要理解图片的加载是一个异步过程,而js是单线程执行,这是一个同步过程,也就是说假设4个图片,遍历数组的时候会执行count++,最后记到4,然后当图片加载完毕的时候才会执行done函数,然后做count--,当count为0的时候表示所有的图片加载完毕