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

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

一、复制表的方式面向对象
[javascript] view plain copy
  1. --Lua中的面向对象
  2. --[[
  3. 复制表方式面向对象
  4. 参数为一张表,通过遍历这张表取值,赋给一张空表,最后返回新建的表,来达到克隆表
  5. ]]
  6. functionclone(tab)
  7. localins={}
  8. forkey,varinpairs(tab)do
  9. ins[key]=var
  10. end
  11. returnins
  12. 复制表
  13. 第一参数是目标表,第二个参数是需要复制的表
  14. 通过遍历tab来取值将它赋值到目标表中
  15. ]]
  16. functioncopy(dist,tab)
  17. dist[key]= end
  18. --定义一张空表,相当于一个类
  19. People={}
  20. --functionPeople.sayHi()
  21. --print("Peoplesayhi")
  22. --end
  23. --定义类中的方法sayHi,传入一个self参数
  24. People.sayHi=function(self)
  25. print("Peoplesayhi:"..self.name)
  26. --定义一个new方法,传进一个name参数,通过克隆People这张表来生成一个对象
  27. --相当于类当中的一个构造方法
  28. People.new=function(name)
  29. localself=clone(People)
  30. self.name=name
  31. returnself
  32. --localp=clone(People)
  33. --p.sayHi()
  34. --生成一个新的对象
  35. localp=People.new("ZhangSan")
  36. --p.sayHi(p)
  37. --p:sayHi()
  38. --定义一张空表,也代表一个类
  39. Man={}
  40. --Man中的构造方法,实现Lua中类的继承
  41. Man. localself=People.new(name)
  42. --附加Man中所有的键值对到People中的实例中去
  43. copy(self,Man)
  44. Man.sayHello=function()
  45. print("Mansayhello")
  46. --重写父类People中的sayHi方法
  47. Man.sayHi= print("MansayHi"..self.name)
  48. --创建Man的一个实例
  49. localm=Man.new("Lisi")
  50. m:sayHi()

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

二、使用函数闭包的形式实现面向对象
    --以函数闭包的形式实现面向对象
  1. --定义一个方法,函数闭包实现一个类的概念
  2. functionPeople(name)
  3. localself={}
  4. --初始化方法,私有的
  5. localfunctioninit()
  6. self.name=name
  7. self.sayHi=function()
  8. print("Hello"..self.name)
  9. --调用初始化
  10. init()
  11. --实例化一个对象
  12. localp=People("ZhangSan")
  13. p:sayHi()
  14. --函数闭包的形式实现类继承
  15. functionMan(name)
  16. localself=People(name)
  17. --localfunctioninit()
  18. --
  19. self.sayHello= print("Hi"..self.name)
  20. returnself
  21. localm=Man("Lisi")
  22. --m:sayHello()
  23. m:sayHi()

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...