2014年10月3日 星期五

2014/10/3 今日學習

黃雅信 邀參觀<自造世代>影片,記得要早點到到,選較前面一點的位子幫她拍照
感謝阿堂分享好專輯


程式碼解析

昨晚看了很久threex.minecraftcharheadanim.js裡面的一段code如下粗體字那段

animations.add('still', THREEx.createAnimation().pushKeyframe(0.5, {
headRotationX : 0,
headRotationY : 0
}).propertyTweens(propTweens).onCapture(onCapture).onUpdate(onUpdate));

昨晚一直在想,裡面的pushKeyframe(duration, position)到底是寫好包在哪個檔案裡面的,今天突然想到可以用WebStorm先按下Ctrl再把滑鼠游標移到pushKeyframe上面按下

用這方是知道pushKeyframe(duration, position)是來自於threex.animation.js,於是乎我再把游標一到animations.add的上面,發現他並非我先前估狗找的是HTML5裡將東西加入list的寫法

觀看這些code時我常在想,為何這些js沒有引用卻可以互相傳遞資源,再度用WebStorm查看第一段CODE

可以看到它可以連到其他寫好的.js去,先前估狗時有瀏覽到透過JavaScript實作多重繼承,開始懷疑是不是就是這個
剛剛估狗關鍵字:javascript 檔案名稱 繼承
找到這篇,第一次看到 var THREEx = THREEx || {};  相似的寫法
  • JavaScript 語言核心(19)名稱空間管理 by caterpillar | CodeData
  • 原來把一個物件用中括號宣告是拿來當作名稱空間
  • var caterpillar = {};     // 作為名稱空間
  • 如此就不會發生名稱覆蓋的問題。或許在同一個 .js 中,以上名稱衝突的情況比較算少數,通常這會發生在兩個 .js 分別由兩個不同組識或作者撰寫時
  • 如果有兩個不同的a.js與b.js,其名稱空間皆用var openhome = {};     // 作為名稱空間
  • a.js裡面有function validate() {...},b.js裡面有function format() {...}。那在同一個網頁中引用 a.js 與 b.js 會如何?如果 b.js 較後引用,那麼,就沒辦法使用openhome.validate 了。
  • 在撰寫 JavaScript 時,要儘量避免使用全域變數
var THREEx = THREEx || {}; 這種寫法的關鍵字:名稱空間 or 命名空間(Namespace)
  • Javascript 命名空間(Namespace)
  • 檢查命名空間是否已存在:
  • var PROJECT = PROJECT || {};  
  • 宣告一個全域物件PROJECT作為基底命名空間,
  • 若PROJECT已存在,則會延用,否則指派成一個空物件
  • 這篇文章看「Javascript Namespace模式(Javascript Namespace Design Pattern)」這段,有詳細介紹


在threex.animation.js看到不少.prototype的寫法,也許這就是我們所要的
  • 談JavaScript使用prototype實作物件導向的探討 : 布丁布丁吃什麼?
  • 這篇可以看到在threex.animation.js裡看到的.prototype相似的寫法
  • 這篇有提到一些prototype在繼承時會造成參數被修改的問題,裡面也提到解決辦法,值得注意的是,這只有在屬性為物件時才可能會受到影響,請對可能受到影響的屬性物件進行初始化,如果屬性的資料型態為字串、數字、布林值,那麼即使不進行初始化也是無所謂的。
這篇當作prototype的入門不錯
  • JavaScript 的 prototype(上) | ericsk.net   (估狗找過,救趙敏去大都等張無忌一樣,有上集沒下集)
  • 從 Function 所 new 出來的是 Object 的實體,也可以透過prototype讓產生出來的實體也有這些成員變數或函式呢
一點紀錄
threex.animation.js算是父類別,threex.minecraftcharheadanim.js算是子類別


在threex.animation.js裡面又看到一個新東西bind()

看到一個奇怪的寫法this._keyframes

連看三個網頁,感覺_keyframes就只是個變數,也許該回頭去看this的用法才對


沒有留言:

張貼留言