Lua的继承(利用setmetatable)
代码的实现很简单,但是主要还是看看别人的quick2dx项目代码,然后自己思考下,学会总结。
模仿大牛的代码也很重要~~~~~
local Animal = {age = 3,gender = "male"} --定义一个Animal的表
function Animal:extend() --定义表中的一个extend方法(继承机制的核心就是下面四行代码)
local obj = obj or {} --if obj not nil return obj,else return {}
setmetatable(obj, self) --set self as obj's metatable 把Animal表自己作为元表放入obj表中
self.__index = self --索引__index是一个特殊的机制,只有设置了索引值,才能在子类调用父类方法时,能找到self(也就是Animal表)中的方法
return obj --返回带有元表的obj
end
function Animal:run() --定义父类的一个方法,作为动物,都可以跑的公共函数
CCLuaLog("run is my gift~!")
end
return Animal
local Horse = require("GameObject.Animal"):extend() --获取带有元表的obj
function Horse:eat() --子类的方法
CCLuaLog("eat grass..."..self.age)
end
return Horse
local pony = require("GameObject.Horse")
pony:run()
pony:eat()
tips:这些代码都是在公司学习时边学习边贴的代码,晚上或者有时间的时候再添上注释

浙公网安备 33010602011771号