Test1.lua
Person = {} function Person:who() print(self.name) end --这个方法用于实例化使用 function Person:new(name) local person = {} --使用元表,并把__index赋值为person类 setmetatable(person,{__index = self}) person.name = name return person end
Test2.lua
require "Test1" --实例化person类 person1 = Person:new('胡歌') person2 = Person:new('IU') person1:who() --输出:胡歌 person2:who() --输出:IU Person:who() --输出:nil
代码解读:
Test1定义了new方法用于实例
1.创建了一个空的普通表用来返回给实例化对象
2.将这个普通表的元表指向Person(self),也就是基础表(这里可以理解成类)
元表指向了Person,则不同表拥有Person的属性与方法
__index的方法使用原则:若访问键没有值,那么就寻找该table的metatable中的__index 键
3. 所以调用who方法时,可以去元表找到该方法,而name属性通过person.name = name已经赋值给相应的对象
则self,代表的是调用的对象,比如person1.who,方法中的self就是person1