栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

cocos2d-lua中调用父类方法的坑(self.super)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cocos2d-lua中调用父类方法的坑(self.super)

cocos2d-lua中调用父类方法的坑(self.super)

本文调用父类方法有三种方式:

  1. self.super:function()

  2. self.super.function()

  3. local parentClass = ParentClass
    parentClass.function(self)

其中第3种方式是最正确的方式,其他两种方式都有问题,接下来讲解前面两种调用方式的问题。

前提:lua中的两种函数调用方式:

lua中用.调用方法的方式是正常的函数调用,而用:调用方法,会默认将调用该方法的table,作为方法的第一个参数传入
也就是self;在定义方法时使用:,方法会默认有一个self的参数传入。

第一种调用方式:self.super:function() – 取不到self中的属性
设:

使用此方式的类为:该类

该类的父类为:父类

此字段对应的方法为:该方法

当该类实例调用该方法时,由于字段使用的是: 调用的方式,导致传入的self为父类,所以在该方法
中自然不能取到该类实例的属性。

第二种调用方式:self.super.function(super) --递归自己,死循环
设:

使用此方式的类为:该类

该类的父类为:父类

该类的子类为:子类

此字段对应的方法为:该方法

当子类实例调用该方法时(子类没有重写该方法),该类中的self为子类,self.super即为该类,从而造成了递归调用该方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号