🐛compatible with vConsole who will wrap global variables with proxy (#2630)

This commit is contained in:
Kuitos 2023-08-23 16:41:10 +08:00 committed by GitHub
parent afb92ed64d
commit 7328396c30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -40,12 +40,13 @@ export function getTargetValue(target: any, value: any): any {
const boundValue = Function.prototype.bind.call(value, target);
// some callable function has custom fields, we need to copy the enumerable props to boundValue. such as moment function.
// use for..in rather than Object.keys.forEach for performance reason
// eslint-disable-next-line guard-for-in,no-restricted-syntax
for (const key in value) {
boundValue[key] = value[key];
}
// some callable function has custom fields, we need to copy the own props to boundValue. such as moment function.
Object.getOwnPropertyNames(value).forEach((key) => {
// boundValue might be a proxy, we need to check the key whether exist in it
if (!boundValue.hasOwnProperty(key)) {
Object.defineProperty(boundValue, key, Object.getOwnPropertyDescriptor(value, key)!);
}
});
// copy prototype if bound function not have but target one have
// as prototype is non-enumerable mostly, we need to copy it from target function manually