People = {name='Chicai'}
function People:New(o,name)
o = o or {}
setmetatable(o,self)
self.__index = self
name = name or 'Chicai'
self.name = name
return o
end
function People:printName()
print(self.name)
end
me = People:New()
me:printName()
声明类People,其实是个Table,New方法用来创建实例,创建一个新的table-o代表实例,设置新table的元表为self就是People类,设置元表的__index元方法为self也还是People类,这样很绕,但是想想o就可以访问People定义好的属性和方法了。
me是一个元表为People的table(对象),me访问方法printName时,发现me没有这个方法,就会去元表的__index里面找,找到People:printName并调用,但是self参数传入的是me,调用me.name,同样找不到,到元表中的_index中找。