[Lua]面向对象

Posted lyh916

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Lua]面向对象相关的知识,希望对你有一定的参考价值。

这里主要说一下Lua在面向对象的使用中需要注意的地方。

 

一.self

self指的是调用者自身,例如:

local a = Shape:New(nil, 10),即local a = Shape.New(self, nil, 10),self指的是Shape;

a:PrintArea(),即a.PrintArea(self),self指的是a。

 1 Shape = {area = 0}
 2 
 3 function Shape:New(o, side)
 4     o = o or {}
 5     setmetatable(o, self)
 6     self.__index = self
 7     side = side or 0
 8     self.area = side * side
 9     return o
10 end
11 
12 function Shape:PrintArea()
13     print("面积为 ", self.area)
14 end
15 
16 print(Shape.area)
17 
18 local a = Shape:New(nil, 10)
19 a:PrintArea()
20 print(Shape.area)
21 
22 local b = Shape:New(nil, 20)
23 b:PrintArea()
24 print(Shape.area)
25 
26 a:PrintArea()
27 print(Shape.area)

技术分享图片

输出分析:

第二句,在Shape:New(nil, 10)时,Shape.area被赋值为100,在a:PrintArea()时,本来要打印的是a.area,但该键值为空,实际打印的是Shape.area。

第六句,在Shape:New(nil, 20)时,Shape.area被赋值为400。

 

那么,可以将上面的self.area = side * side改一下,改为o.area = side * side,输出如下。可以看到,此时New出来的实例都有各自的area值,不影响Shape表,此时才是符合面向对象设计的。

技术分享图片

 

二.元表的__index元方法

 

以上是关于[Lua]面向对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

Lua程序设计之————Lua面向对象1

cocos2d-Lua02Lua面向对象

lua面向对象是怎么实现的

Lua面向对象设计(转)

Lua 面向对象