apolloxlua 是一個將js翻譯到lua的工具。web
類:編程
在apolloxlua.js編程概念裏, 類的可見性是在每一個文件內部,咱們的一個模塊/組件/或者一個咱們能夠稱爲程序集的概念裏, 可能會有大量的類的實體,使用不一樣的抽象來實現,這些類是構成咱們程序的基本單元, 從邏輯設計上來說,類是最小的隔離單位, 這個粒度基於你所使用的架構設計的分割粒度。咱們的類在一個物理文件中對外可見, 須要對外進行包裝,這樣能夠減小全局的內容衝突,實現模塊化。架構
一個應用的結構多是這樣的:app
---- appide
---module ---- classes模塊化
---module -----classes函數
......工具
----module -----entrypoint測試
如何描述和組織這些文件,是物理設計的範疇,咱們這裏不作任何描述。在web 模式 是不會產生模塊的,全部的classses 若是存在某個命名空間裏, 那麼在內存中的描述是平坦的。在tool模式 若是定義某個類或者模塊存在咱們的代碼文件中,那麼會輸出一個module同步到NameSpace相同的物理目標文件中,做爲模塊導出, 一樣也須要對外包裝。固然這一切都是apolloxlua自動完成的。this
定義一個類:
class Person{ hellow(){ console.log("base Person") console.log(this.age) } setAge(v) { this.age = v; } static staticSmethod (...args) { console.log(args[1], args[2]); console.log("i am static method"); } }
處理多態:
若是這個類沒有構造函數的話, 系統會自動生成一個構造函數。 若是有則不會處理。 overload 咱們不須要那麼多的方法,由於參數是支持可變的。 override 若是子類繼承了父類,那麼子類中和父類相同的方法就會覆蓋父類的方法。繼承:只支持單繼承。在類的內部,全部的方法都是public的。
繼承代碼:
class Person2 extends Person{ Person2 (name) { this.name = name; console.log("constructor.."); } hellow(){ console.log("override "); console.log("name=" + this.name + ",age=" + this.age); } }
構造函數是和類名相同的一個方法。繼承的話須要使用extends關鍵字和父類的實體名稱。 因爲類的可見性是基於文件的, 因此咱們的繼承對象必定定義在這個物理文件中,否則查找不到類實體的符號。static 的方法是能夠被子類繼承的,static 內部沒法使用this關鍵字。
使用類:
咱們可使用New關鍵字來訪問構造函數,初始化一個實例。
var p1 = Person >>> New(); var p2 = Person2 >>> New("agent.zy"); p1 >>> setAge(10); p2 >>> setAge(20); p1 >>> hellow(); p2 >>> hellow();
本示例結果如圖:
查看並測試 控制檯示例