您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x 脚本语言Lua中的面向对象

2014-10-08 00:43 369 查看
面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程。在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承。

一、复制表的方式面向对象

[javascript] view
plaincopy





--Lua中的面向对象  

--[[  

  复制表方式面向对象  

  参数为一张表,通过遍历这张表取值,赋给一张空表,最后返回新建的表,来达到克隆表  

]]  

function clone(tab)  

    local ins = {}  

    for key, var in pairs(tab) do  

        ins[key] = var  

    end  

    return ins  

end  

  

--[[  

  复制表  

  第一参数是目标表,第二个参数是需要复制的表  

  通过遍历tab来取值将它赋值到目标表中  

]]  

function copy(dist,tab)  

    for key, var in pairs(tab) do  

        dist[key] = var  

    end  

end  

  

-- 定义一张空表,相当于一个类  

People ={}  

  

--function People.sayHi()  

--  print("People say hi")  

--end  

  

-- 定义类中的方法sayHi,传入一个self参数  

People.sayHi = function (self)  

    print("People say hi:"..self.name)  

end  

  

-- 定义一个new方法,传进一个name参数,通过克隆People这张表来生成一个对象  

-- 相当于类当中的一个构造方法  

People.new = function (name)  

    local self = clone(People)  

    self.name = name  

      

    return self  

end  

  

--local p = clone(People)  

--p.sayHi()  

--生成一个新的对象  

local p = People.new("ZhangSan")  

--p.sayHi(p)  

--p:sayHi()  

  

  

--定义一张空表,也代表一个类  

Man = {}  

--Man中的构造方法,实现Lua中类的继承  

Man.new = function (name)  

    local self = People.new(name)  

    --附加Man中所有的键值对到People中的实例中去  

    copy(self,Man)  

    return self  

end  

  

Man.sayHello = function ()  

    print("Man say hello")  

end  

  

--重写父类People中的sayHi方法  

Man.sayHi = function (self)  

    print("Man sayHi "..self.name)  

end  

  

--创建Man的一个实例  

local m = Man.new("Lisi")  

m:sayHi()  

以上代码已经有详细的注释,读者需要仔细阅读这里所给出的例子。

二、使用函数闭包的形式实现面向对象

[javascript] view
plaincopy





--以函数闭包的形式实现面向对象  

  

--定义一个方法,函数闭包实现一个类的概念  

function People(name)  

    local self = {}  

  --初始化方法,私有的  

    local function init()  

        self.name = name  

    end  

    

    self.sayHi = function ()  

        print("Hello "..self.name)  

    end  

  

  --调用初始化  

    init()  

    return self  

end  

  

--实例化一个对象  

local p = People("ZhangSan")  

p:sayHi()  

  

--函数闭包的形式实现类继承  

function Man(name)  

    local self = People(name)  

      

--  local function init()  

--        

--  end  

  

    self.sayHello = function ()  

        print("Hi "..self.name)  

    end  

      

    return self  

end  

  

  

local m = Man("Lisi")  

--m:sayHello()  

m:sayHi()  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息