Cocos2d-x 脚本语言Lua中的面向对象
生活随笔
收集整理的這篇文章主要介紹了
Cocos2d-x 脚本语言Lua中的面向对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Cocos2d-x 腳本語言Lua中的面向對象
面向對象不是針對某一門語言,而是一種思想。在面向過程的語言也能夠使用面向對象的思想來進行編程。
一、復制表的方式面向對象--Lua中的面向對象 --[[復制表方式面向對象參數為一張表。通過遍歷這張表取值,賦給一張空表,最后返回新建的表。來達到克隆表 ]] function clone(tab)local ins = {}for key, var in pairs(tab) doins[key] = varendreturn ins end--[[復制表第一參數是目標表,第二個參數是須要復制的表通過遍歷tab來取值將它賦值到目標表中 ]] function copy(dist,tab)for key, var in pairs(tab) dodist[key] = varend 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 = namereturn 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 endMan.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()
以上代碼已經有具體的凝視。讀者須要細致閱讀這里所給出的樣例。
二、使用函數閉包的形式實現面向對象--以函數閉包的形式實現面向對象--定義一個方法,函數閉包實現一個類的概念 function People(name)local self = {}--初始化方法,私有的local function init()self.name = nameendself.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() -- -- endself.sayHello = function ()print("Hi "..self.name)endreturn self endlocal m = Man("Lisi") --m:sayHello() m:sayHi()
以上兩種方式均可實現面向對象。目測另外一種方法更為簡潔一些,具體使用依照個人的喜好來做。
面向對象不是針對某一門語言,而是一種思想。在面向過程的語言也能夠使用面向對象的思想來進行編程。
在Lua中,并沒有面向對象的概念存在,沒有類的定義和子類的定義。但相同在Lua中能夠利用面向對象的思想來實現面向對象的類繼承。
一、復制表的方式面向對象--Lua中的面向對象 --[[復制表方式面向對象參數為一張表。通過遍歷這張表取值,賦給一張空表,最后返回新建的表。來達到克隆表 ]] function clone(tab)local ins = {}for key, var in pairs(tab) doins[key] = varendreturn ins end--[[復制表第一參數是目標表,第二個參數是須要復制的表通過遍歷tab來取值將它賦值到目標表中 ]] function copy(dist,tab)for key, var in pairs(tab) dodist[key] = varend 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 = namereturn 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 endMan.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()
以上代碼已經有具體的凝視。讀者須要細致閱讀這里所給出的樣例。
二、使用函數閉包的形式實現面向對象--以函數閉包的形式實現面向對象--定義一個方法,函數閉包實現一個類的概念 function People(name)local self = {}--初始化方法,私有的local function init()self.name = nameendself.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() -- -- endself.sayHello = function ()print("Hi "..self.name)endreturn self endlocal m = Man("Lisi") --m:sayHello() m:sayHi()
以上兩種方式均可實現面向對象。目測另外一種方法更為簡潔一些,具體使用依照個人的喜好來做。
轉載于:https://www.cnblogs.com/mengfanrong/p/5140406.html
總結
以上是生活随笔為你收集整理的Cocos2d-x 脚本语言Lua中的面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj3580 伸展树(区间翻转 区间搬
- 下一篇: 致首次创业者:如果做到了这三点,想不成功