lua面向对象(创建与实例化)

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

原文地址:https://www.cnblogs.com/hhs1998/p/15757199.html