[LayaAir3]Pool对象池获取继承对象时会返回基类对象

const { regClass, property } = Laya;

@regClass()
export class Main extends Laya.Script
{

onStart()
{
let item1 = Laya.Pool.createByClass(TestClass);
console.log('item1:', item1.type);
Laya.Pool.recoverByClass(item1);
let item2 = Laya.Pool.createByClass(TestClass2);
console.log('item2:', item2.type);
console.log(item1 == item2);
}
}
export class TestClass
{
type = 0;
}
export class TestClass2 extends TestClass
{
constructor()
{
super();
this.type = 1;
}
}
测试代码如上所示,打印结果是:0,0,true,预期结果是:0,1,false才对。

poolBug.png

获取TestClass2实例时,返回的是TestClass的实例对象,看了下源码,发现是获取类唯一标志时出了问题
/**
* 返回类的唯一标识
*/
private static _getClassSign(cla: any): string {
var className = cla["__className"] || cla["_$gid"];
if (!className) {
cla["_$gid"] = className = Pool._CLSID + "";
Pool._CLSID++;
}
return className;
}
cla["__className"] || cla["_$gid"]这种写法会查找父类的属性,导致父类和子类返回了同一标志,让对象池混乱了
这个问题2.0版本也存在,现在只能手动给每个类添加__className规避,希望能尽快修复
已邀请:

要回复问题请先

商务合作
商务合作