首先說明一下,我對這個庫並不瞭解,只是由於OpenWebGlobe用到了這個庫做爲他的框架,因此纔有所瞭解,所以瞭解的深度有限,只是基於足夠在OpenWebGlobe中使用和擴展一些自定義的文件,而且壓縮打包js腳本,這些比較基礎的功能。 html
上網瞭解了一下這個Closure,簡單說就是Google Javascript SDK,提供了一個js的framework,方便用戶的擴展,closure 使用library來提高開發效率,使用侵入性極強的 compiler 來去除無用代碼,保證執行效率縮減 js 的大小,看來一下這個庫的一些博文,以爲寫的仍是頗有收穫的,特別是這一篇:http://www.cnblogs.com/justinw/archive/2009/12/07/1618500.html,固然我主要是看API,這裏簡單說一下在OWG裏面用到的地方。 jquery
第一,我以爲最有意義的是closure提供了工做空間這個概念,以往JS都是全局形式的,而經過goog.provide和goog.require,從而實現了這個功能,爲大規模的JS框架提供了很大的便利。如上所述,provide相似export,而require相似import 框架
第二,提供了closure compiler工具,能夠實現高效的混淆打包,提升js的效率,並且很是方便,具備語法糾錯的功能,將你的代碼隱患提早暴露,也免去了你本身進行打包的工做量。 ide
第三,對第三方的插件支持的不夠好,固然我以爲closure不推薦你們使用第三方的插件,好比做爲初學,我開始不知道closure原來也有xml parser的方法,因此引入了jquery,源碼形式下都還好,可以運行,但混淆後對jquery的關鍵字進行了壓縮更改,致使jquery沒法使用,後來才發現,須要用goog.getObjectByName()這個方式,才能保證不被替換,從而可以兼容,不過仍是稍微有點繞。 函數
第四,有一個須要注意的就是你在增長本身的類時,須要將依賴關係整理清晰,避免循環依賴的可能性,這在js裏面是沒法經過語法解決的,並且因爲prototype是淺拷貝,因此在涉及到類的繼承時,對於Object的處理也比較麻煩,closure是採用inherits方法來實現繼承的,這個是有區分的,因此根據你的設計須要選擇不一樣的方法來實現。 工具
第五,用到的goog.exportSymbol和goog.exportProperty算是指定接口能夠在外部調用的函數和屬性,否則由於打包壓縮會講命名替換,因此若是你的接口打算對外開發就須要指定,若是隻是內部使用則不須要聲明。 ui
其餘,goog.events.listen,顧名思義就是一些事件監聽封裝,好比窗口變化,鼠標鍵盤等事件,若是須要則可使用,其餘的prototype
什麼isnull之類的我也沒有查。插件
總之在OWG中,使用了closure的基礎功能,同時採用compiler壓縮腳本,這樣的一個框架,至此,前期的準備工做結束,下面,開始代碼部分,下一節主要講OWG的相機這塊,由於比較複雜,因此先從座標系開始講,主要涉及大地座標系,NED座標系和body coordinate system這些相關概念,方便後續相機的闡述。設計