本文承接上一篇,继续用 Lua 演示如何借助 metatable 的 __index 机制,实现"类"与"对象"的基本模型:通过一个带默认字段的 table 作为类,再用 class:new() 生成继承自该类的对象实例。

示例代码

local class={x=5}

function class:new()--定义创建对象方法
  o={}--新建一个table

  setmetatable(o,{__index=self})--相当于空继承出一个class的 对象
  --【【
  等效于
  setmetatable(0,self)
  self.__index=self--self为调用者
  --】】
  return o
end



local a=class:new()--new 中 self为class
a.x=6
print(a.x)
print(class.x)