自定義腳本語言引擎開發紀實 - 面向對象(class)

定義類的語法

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名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章