我正在使用纯 Javascript(无 Coffescript)的 Spine.js。
我正在使用文档中描述的语法来调用父类方法。
具体来说:this.constructor.__super__.someFunction.apply(this, arguments)
这对于调用它的直接父类的直接子类来说很好。但是加上一个孙子班,一切都乱套了。在孙子类的实例上调用该方法会导致无限循环。我有一个jsFiddle,它通过实现此处显示的类层次结构来演示这一点:
MyObjClass(实现方法 sayHi()) ^ | My2ndObjClass(方法 sayHi() 调用超类) ^ | My3rdObjClass
当在 My3rdObjClass 的实例上调用 sayHi() 时,您会得到一个无限循环(Chrome 控制台报告最大堆栈错误)。
我的猜测是,当 sayHi() 在 My3rdObj 上运行时,它自然会运行父类实现(因此,My2ndObjClass 的 sayHi() 会执行)。My2ndObjClass 的 sayHi() 然后将super解析为 My2ndObjClass 而不是 MyObjClass (如我所料),因此对 super 的调用现在变成了递归调用,然后我们就走了…… StackOverflow ;)
那么,我做错了什么,还是这是 Spine 的限制?我怀疑有一些聪明的方法可以解决这个问题,但我没有通过谷歌或 RTFM 找到它。