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();
本示例结果如图:
查看并测试 控制台示例