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:这些代码都是在公司学习时边学习边贴的代码,晚上或者有时间的时候再添上注释