經過函數閉包的方式來實現面向對象閉包
1 -- 經過函數閉包的方式來實現面向對象 2 3 function People(name) 4 local self = {} 5 local function init() 6 self.name = name 7 end 8 9 self.sayHi = function() 10 print("Hello"..self.name) 11 end 12 init() 13 return self 14 end 15 16 --local p = People("XiaoLi") 17 --p:sayHi() 18 19 -- 繼承 20 function Man(name) 21 22 local function init() 23 24 end 25 26 local self = People(name) 27 28 self.sayHi() -- 調用父類的函數 29 30 self.sayHi = function() 31 print("重寫父類的函數 sayHi") 32 end 33 return self 34 end 35 36 local m = Man("隔壁老王") 37 m:sayHi()
經過複製表的方式來實現面向對象函數
1 -- Lua語言面向對象之複製表的方式面向對象 2 3 function clone(tab) 4 local ins = {} 5 for key, var in pairs(tab) do 6 ins[key] = var 7 end 8 return ins 9 end 10 11 function copy(dist,tab) 12 for key, var in pairs(tab) do 13 dist[key] = var 14 end 15 end 16 17 People ={} 18 19 function People.sayHi(self) 20 print("People sayHi"..self.name) -- .. 表示字符串鏈接 21 end 22 23 People.new = function(name) 24 local self = clone(People) 25 self.name = name 26 27 return self 28 end 29 -- 30 --local p = clone(People) 31 --p.sayHi() 32 33 local p = People.new("Jinpp") 34 -- p.sayHi(p) -- 運行結果 People sayHiJinpp 35 p:sayHi() -- 運行結果 People sayHiJinpp 36 37 38 -- 類的繼承 39 Man = {} 40 Man.new = function(name) 41 local self = People.new(name) 42 copy(self,Man) 43 return self 44 end 45 -- 46 Man.sayHello = function() 47 print("Man say Hello") 48 end 49 50 -- 函數的重寫 51 Man.sayHi = function(self) 52 print("Man sayHi "..self.name) 53 end 54 55 local m = Man.new("Lisi") 56 m:sayHello() 57 m:sayHi()
蠻簡單的特別好理解。2016年01月24日21:43:39spa