diff --git a/cocos/core/value-types/enum.ts b/cocos/core/value-types/enum.ts index c86145a8576..cdf1ec195e7 100644 --- a/cocos/core/value-types/enum.ts +++ b/cocos/core/value-types/enum.ts @@ -52,7 +52,17 @@ export function Enum (obj: T): T { return obj; } value(obj, '__enums__', null, true); + return Enum.update(obj); +} +/** + * @en + * Update the enum object properties. + * @zh + * 更新枚举对象的属性列表。 + * @param obj + */ +Enum.update = (obj: T): T => { let lastIndex: number = -1; const keys: string[] = Object.keys(obj); @@ -125,7 +135,18 @@ Enum.getList = (enumType: EnumT): readonly Enum.Enumerator(enumType: EnumT): readonly Enum.Enumerator[] => { + assertIsEnum(enumType); + const enums: any[] = enumType.__enums__ || []; + enums.length = 0; // tslint:disable-next-line: forin for (const name in enumType) { const v = enumType[name]; @@ -134,6 +155,7 @@ Enum.getList = (enumType: EnumT): readonly Enum.Enumerator a.value - b.value); + enumType.__enums__ = enums; return enums; };