apolloxlua class支持示例

爷,独闯天下 提交于 2019-12-06 21:35:01

apolloxlua 是一个将js翻译到lua的工具。

类:

        在apolloxlua.js编程概念里, 类的可见性是在每个文件内部,我们的一个模块/组件/或者一个我们可以称为程序集的概念里, 可能会有大量的类的实体,使用不同的抽象来实现,这些类是构成我们程序的基本单元,  从逻辑设计上来讲,类是最小的隔离单位, 这个粒度基于你所使用的架构设计的分割粒度。我们的类在一个物理文件中对外可见, 需要对外进行包装,这样可以减少全局的内容冲突,实现模块化。

一个应用的结构可能是这样的:

---- app

      ---module  ---- classes

      ---module  -----classes

     ......

     ----module -----entrypoint

如何描述和组织这些文件,是物理设计的范畴,我们这里不做任何描述。在web 模式 是不会产生模块的,所有的classses 如果存在某个命名空间里, 那么在内存中的描述是平坦的。在tool模式 如果定义某个类或者模块存在我们的代码文件中,那么会输出一个module同步到NameSpace相同的物理目标文件中,作为模块导出, 同样也需要对外包装。当然这一切都是apolloxlua自动完成的。

定义一个类:

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();

本示例结果如图:

查看并测试  控制台示例

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!