回答楼下疑问,hasOwnProperty方法无法检查该对象的原型链中是否具有该属性,所以image.hasOwnProperty(key)拿到的只是对象构造函数中本身的成员,!image.hasOwnProperty(key)拿到的就是对象原型链上的属性,这时候执行continue就相当于过滤掉prototype上的属性了。
ps.老师用的是什么编辑器啊,怎么看着有点像Android Studio
ps.老师用的是什么编辑器啊,怎么看着有点像Android Studio
2016-07-08
已采纳回答 / ustbhuangyi
首先,要理解JS是单线程的。也就是说,在一次Event Loop中,会同步执行完所有JS代码。同步任务是在一次Event Loop中执行的JS代码,去完成相应的“任务”。异步任务不是一次Event Loop可以做完的,通常JS有几种方式实现异步,如异步ajax请求,setTimeout,requestAnimationFrame等。动画库这个案例中,我们引入了“任务链”这个概念,把一些同步异步的“任务”添加到任务链上。所有通过timeline创建的动画都是异步任务,因为它底层用到了requestAnima...
2016-07-08
讲师回答 / ustbhuangyi
其实这个帧动画库我在百度工作的时候,从一个实际项目需求里抽象出来的。因为我们有大量帧动画的需求,但又不想为每个需求去编写那些重复的代码,所以就想抽象一个通用的帧动画库,方便开发。当时设计接口的时候一个很重要的原则,就是怎么让人用起来爽,就定了链式调用这种方式。后来也发现这种设计和promise的一些设计思想不谋而合。一开始设计的时候就考虑到大部分接口了,比如loadImage,changePosition,changeSrc,then,repeat,repeatForever,enterFrame,sta...
2016-07-05
讲师回答 / ustbhuangyi
首先,要理解JS的执行是单线程的,在一轮Event Loop的时候,会执行所有同步JS代码。setInterval的运行机制是,将指定的代码移出本次执行,等到下一轮Event Loop时,再检查是否到了指定时间。如果到了,就执行对应的代码;如果不到,就等到再下一轮Event Loop时重新判断。这意味着,setTimeout指定的代码,必须等到本次执行的所有代码都执行完,才会执行。每一轮Event Loop时,都会将“任务队列”中需要执行的任务,一次执行完。setTimeout和setInterval都是...
2016-07-04