欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自定义脚本语言引擎开发纪实 - 面向对象(class)

程序员文章站 2022-04-10 15:38:41
...

定义类的语法

class child

endclass

构造函数__init__

	func __init__(self, name, age)
		self.name = name
		self.age = age
	end

析构函数__del__

	func __del__(self)
	end

类对象函数

	func GetNameAndAge(self)
		return self.name, self.age
	end

类变量(类全局变量)

用过类名.attri访问(与python不同,也允许通过self.attri访问全局变量;所以如果有同名的全局变量,通过self.attri并不会给对象添加属性)

class child
	sum=0
	school="大二班"
endclass

类函数(类全局函数)(第一参数不是self的就归为类全局函数)

通过类名.func方法名访问

class child
	sum=0
	school="大二班"
	func GetSchool()
		return child.school
	end
	func GetSum()
		return child.sum
	end
endclass

完整的自定义类实例

class child
	sum=0
	school="大二班"
	func __init__(self, name, age)
		self.name = name
		self.age = age
		child.sum = child.sum + 1
	end
	func __del__(self)
		child.sum = child.sum - 1
	end
	func GetSchool()
		return child.school
	end
	func GetSum()
		return child.sum
	end
	func GetNameAndAge(self)
		return self.name, self.age
	end
endclass

测试代码如下

xiaoming=child("小明", 8)
yew=child("耀耀", 6)
xiaogang=child("小刚", 7)
//输出log
js.debug.log("log\tname:" + xiaoming.name + "\tage:" + xiaoming.age)
js.debug.log("log\tname:" + yew.name + "\tage:" + yew.age)
js.debug.log("log\tname:" + xiaogang.name + "\tage:" + xiaogang.age)
js.debug.log("log\t学校:" + child.school + "共有学生:" + child.GetSum() + "名")

运行结果:

[24176] log name:小明 age:8
[24176] log name:耀耀 age:6
[24176]log name:小刚 age:7
[24176] log 学校:大二班共有学生:3名

接下来,有一名学生转学了

//触发析构,类似python中的del xiaogang
xiaogang=nil

js.debug.log("log\tname:" + xiaoming.name + "\tage:" + xiaoming.age)
js.debug.log("log\tname:" + yew.name + "\tage:" + yew.age)
js.debug.log("log\tname:" + xiaogang.name + "\tage:" + xiaogang.age)
js.debug.log("log\t学校:" + child.school + "共有学生:" + child.GetSum() + "名")

输出log(xiaogang同学的信息已经找不到了,学生减少了一名)

[26856] log name:小明 age:8
[26856] log name:耀耀 age:6
[26856] log name:xiaogang.name age: xiaogang.age
[26856] log 学校:大二班共有学生:2名