自定义脚本语言引擎开发纪实 - 面向对象(class)
程序员文章站
2022-04-10 15:38:41
...
脚本定义类,语法借鉴了python
定义类的语法
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名