Lua的继承(利用setmetatable)
代码的实现很简单,但是主要还是看看别人的quick2dx项目代码,然后自己思考下,学会总结。
模仿大牛的代码也很重要~~~~~
local Animal = {age = 3,gender = "male"} --定义一个Animal的表function Animal:extend() --定义表中的一个extend方法(继承机制的核心就是下面四行代码)local obj = obj or {} --if obj not nil return obj,else return {}setmetatable(obj, self) --set self as obj's metatable 把Animal表自己作为元表放入obj表中self.__index = self --索引__index是一个特殊的机制,只有设置了索引值,才能在子类调用父类方法时,能找到self(也就是Animal表)中的方法return obj --返回带有元表的obj
endfunction Animal:run() --定义父类的一个方法,作为动物,都可以跑的公共函数CCLuaLog("run is my gift~!")
endreturn Animal
local Horse = require("GameObject.Animal"):extend() --获取带有元表的objfunction Horse:eat() --子类的方法CCLuaLog("eat grass..."..self.age)
endreturn Horse
local pony = require("GameObject.Horse")pony:run()pony:eat()
tips:这些代码都是在公司学习时边学习边贴的代码,晚上或者有时间的时候再添上注释
转载于:https://www.cnblogs.com/vokie/p/3602086.html
Lua的继承(利用setmetatable)相关推荐
- cocos2d-x-lua基础系列教程四(lua多继承)
lua - 多继承 1,模拟伪继承 新建extend_test.lua 新建extend_test.luasetmetable(a,b) b对象是a 对象的父类 a继承于bAccount = {num ...
- lua实现继承(lua程序设计21.7 练习21.2题)
lua实现继承(lua程序设计21.7 练习21.2题) StackQueue = Stack:new() function StackQueue:insertBottom(v)table.inser ...
- lua的table+setfenv+setmetatable陷阱
--file1.lua x = funciton() print("this is x") end ------------- --file2.lua local t = {} ...
- JS学习笔记 原型链和利用原型实现继承
原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的 实例对象中有__proto__,是对象,叫原型,不是标准的属性,浏览器使用,并且有的游览器不支持 ...
- 【Lua】常见知识点汇总(包含常见面试考点)
版权声明:本文为CSDN博主「趁着头发多我想做游戏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/weixi ...
- nginx lua编程要点,看完肯定会提高你的编码能力
lua new table.new(narray, nhash) 两个参数分别代表table里是array还是hash的 table.new(10, 0) 或者 table.new(0, 10) 这样 ...
- Lua,让人惊叹的艺术!
chrisxie的专栏 2008-09-30 12:09 Lua 对于国人来说可能还比较陌生,然而随着它在电子娱乐.网络娱乐界得到大量的应用,许多人也开始关注起它来. Lua 虽然是一门脚本语言,但麻 ...
- Cocos2d-x 脚本语言Lua中的面向对象
Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...
- [转载]Lua脚本与C++交互
Lua脚本在C++下的舞步(入门指引)(转) Lua脚本在C++下的舞步(一)(入门指引) 转帖来自:http://www.acejoy.com/bbs/viewthread.php?tid=1931 ...
最新文章
- python中基本程序结构_关于Python 程序格式框架的描述,正确的是( )
- mysql 修改配置生效_linux下面MySQL变量修改及生效
- android配置文件说明
- 《大数据存储:MongoDB实战指南》一1.1 什么是大数据
- 三星三层影像传感器提升拍摄能力 索尼压力倍增
- Fedora 13 的新特性
- C++array容器用法解析,它与普通数组究竟有何不同?
- 闽南师范大学计算机学院研究生,闽南师范大学计算机学院2019考研调剂信息
- AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)
- ubuntu修改启动项等待时间、修改启动项顺序、更改启动内核
- Publish over FTP发布报错
- 迟到的秋招经验分享贴,希望能帮到大家
- 从阿里投资B站看动漫IP,二次元市场蕴含了怎样的价值?
- php文字怎么居中,PHP图片文字合成居中
- oracle 常用调优方法
- 《 PHP+H5全栈工程师培训项目实战》
- 解决word中公式插入后行间距变大,和文字不统一的问题
- github100天python_GitHub - jazeyoung/Python-100-Days: Python - 100天从新手到大师
- mysql 内连接、左连接会出现笛卡尔积?
- 使用git拉取远程仓库代码
热门文章
- 个人觉得不错的网站或文章
- Nginx 作为代理服务与负载均衡
- VMware linux 克隆机的配置
- ELK 企业级日志分析系统
- java构造顺序_Java构造顺序
- kill进程_你还在使用kill -9 杀进程吗?从原理谈避免踩雷!
- centos 卸载docker_Spring Boot学习05_Docker卸载与安装
- 云栖发布|阿里云消息队列 RocketMQ 5.0:消息、事件、流融合处理平台
- 深度解读 MongoDB 4.4 新特性
- 阿里SRE体系如何支撑24小时峰值压力、220+个国家“剁手党”?