cocos2d-lua中调用父类方法的坑(self.super)
cocos2d-lua中调用父类方法的坑(self.super)
本文调用父类方法有三种方式:
self.super:function()
self.super.function()
local parentClass = ParentClass
ParentClass.function(self)
其中第3种方式是最正确的方式,其他两种方式都有问题,接下来讲解前面两种调用方式的问题。
前提:lua中的两种函数调用方式:
lua中用.
调用方法的方式是正常的函数调用,而用:
调用方法,会默认将调用该方法的table,作为方法的第一个参数传入
也就是self;在定义方法时使用:
,方法会默认有一个self的参数传入。
第一种调用方式:self.super:function() – 取不到self中的属性
1 |
|
当该类
实例调用该方法
时,由于字段使用的是:
调用的方式,导致传入的self为父类
,所以在该方法
中自然不能取到该类
实例的属性。
第二种调用方式:self.super.function(super) –递归自己,死循环
1 |
|
当子类
实例调用该方法
时(子类
没有重写该方法),该类
中的self为子类
,self.super即为该类
,从而造成了递归调用该方法。
cocos2d-lua中调用父类方法的坑(self.super)
http://ccffee.fun/2022/06/23/cocos2d-lua中调用父类方法的坑(self.super)/