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中的属性

1
2
3
4
5
6
7
设:

使用此方式的类为:该类

该类的父类为:父类

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

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

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

1
2
3
4
5
6
7
8
9
设:

使用此方式的类为:该类

该类的父类为:父类

该类的子类为:子类

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

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


cocos2d-lua中调用父类方法的坑(self.super)
http://ccffee.fun/2022/06/23/cocos2d-lua中调用父类方法的坑(self.super)/
作者
ccffee
发布于
2022年6月23日
许可协议