Ở đây viết rất rõ http://lua-users.org/wiki/MetatableEvents
nếu “đối tượng” hiện tại ko có slot đó thì sẽ kích hoạt __index
trong metatable của đối tượng ấy.
Không có câu Table._index = Table
thì không có prototype.
Table.__index = Table
-- example
function Table:test()
return #self
end
newtable = Table.new()
newtable:test()
Do đối tượng newtable
không có slot "test"
nên qua __index
tìm được Table, nhưng self
vẫn được bind vào newtable
.
Cái này hơi hại não http://lua.space/general/intro-to-metatables, đọc 1 hồi thì nó khá giống JS, nhưng Lua ngoài table và “túi method” còn có thêm metatable chứa metamethods (!)