--lua类定义的一般模板:
function ClassName:New(o)
o = o or {}
setmetatable(o,{__index = self}) --给派生类设置新的元表,元表的__index元方法指向基类自己
return o
end
或者
function ClassName:New(o)
o = o or {}
setmetatable(o,self) --将基类自身设置为派生类的元表
self.__index = self --设置基类自身__index元方法指向基类自己
return o
end
原理:
1.创建新的table(派生表),给派生表设置“元表”
2.并使“元表中的__index元方法指向基表自身”
3.以此达到:访问派生表中不存在的key或方法时,会根据__index去找基表里的key或方法
对于lua来说,对象和类并不存在一个严格的划分。
当一个对象被另一个table的__index元方法引用时,table就能引用该对象中所定义的方法
因此也就可以理解为对象变成了table的类