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

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


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

一、复制表的方式面向对象
--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()




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

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

--定义一个方法,函数闭包实现一个类的概念
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()

以上两种方式均可实现面向对象,目测第二种方法更为简洁一些,具体使用按照个人的喜好来做。









  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小巫技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值