回答樓下疑問,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