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中的属性
设:
使用此方式的类为:该类
该类的父类为:父类
此字段对应的方法为:该方法
当该类
实例调用该方法
时,由于字段使用的是:
调用的方式,导致传入的self为父类
,所以在该方法
中自然不能取到该类
实例的属性。
第二种调用方式:self.super.function(super) --递归自己,死循环
设:
使用此方式的类为:该类
该类的父类为:父类
该类的子类为:子类
此字段对应的方法为:该方法
当子类
实例调用该方法
时(子类
没有重写该方法),该类
中的self为子类
,self.super即为该类
,从而造成了递归调用该方法。