zoukankan      html  css  js  c++  java
  • Lua 基础知识-面向对象

    通过函数闭包的方式来实现面向对象

     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:39

  • 相关阅读:
    JS弹出层可拖拽
    DWZ搭建页面快速入门笔记
    JQuery 选择器总结
    最新身份证验证
    centos7磁盘扩容
    vue中使用vueamap(高德地图)
    后台数据格式有问题,更改数据格式
    《JavaScript高级程序设计(第3版)》问题收集
    slice()、substr()、substring()的结果
    【SQL】统计数据过程中利用Union去重
  • 原文地址:https://www.cnblogs.com/-jpp/p/5156060.html
Copyright © 2011-2022 走看看