Lua一日游:(3)面向对象——复制表形式 Published at: 2014-03-09 | Reading: 546 words ~2min | PV/UV: / 我们直接来看代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 -- 我们定义一个对象People(其实是一个表) People = {} -- 定义成员函数方式1 --function People.sayHi() -- print("people say hi") --end -- 定义成员函数方式2(推荐),这是People对象中得成员方法 People.sayHi = function(self) print("People say hi:"..self.name) --..表示字符串链接 end -- 方法:克隆一个table, 用于利用现有对象创建新对象 function clone(tab) local ins = {} -- 这是一个local table for key, var in pairs(tab) do -- 将tab中得对象拷贝到ins中 ins[key] = var end return ins -- 返回ins end -- 可以理解为一个构造函数 People.new = function (name) local self = clone(People) -- 通过现有对象来构造新对象 self.name = name return self end --local p = clone(People) -- 类似与实例 --p.sayHi() -- 使用new方法来构造一个新的对象p,并且调用了People对象的成员方法sayHi() local p = People.new("zhangsan") --p.sayHi(p) -- 这两种调用形式都可以, p:sayHi() -- 上下两行一样(推荐这种) -- 实现继承 Man = {} -- 定义了一个Man对象 -- 方法:tab中得对象copy到dist中 function copy(dist, tab) for key, var in pairs(tab) do dist[key] = var end end Man.new = function(name) --这是Man的构造方法 local self = People.new(name) -- Man是从People中继承下来的 copy(self, Man)-- man的所有实例需要附加到people return self end -- 这是Man的成员方法 Man.sayHello = function() print("Man say hello:") end -- 并且我们还可以重写People的sayHi()方法 Man.sayHi = function (self) print("Man sayHi"..self.name) end -- 例 local m = Man.new("changkun") m:sayHello() m:sayHi()