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
Boy = People:New({sex='boy'})
function Boy:printSex()
print(self.sex)
end
me = Boy:New()
me:printName()
me:printSex()Boy是People的一个对象(Boy的元表的__index方法是People),Boy有自己的属性sex和方法printSex
me是Boy的一个对象,Boy调用继承过来的New方法,但是self参数改为了Boy,也就是说me的元表的__index是Boy
当me调用方法,在me中找不到时,就会去Boy的__index(还是Boy)中找,Boy也找不到,就去People找,调用时,self为me了