@opra/common
Version:
Opra common package
32 lines (31 loc) • 1.16 kB
JavaScript
export function mergePrototype(targetProto, baseProto, filter) {
for (const k of Object.getOwnPropertyNames(baseProto)) {
if (k === 'constructor' ||
k === '__proto__' ||
k === 'toJSON' ||
k === 'toString' ||
(filter && !filter(k))) {
continue;
}
Object.defineProperty(targetProto, k, Object.getOwnPropertyDescriptor(baseProto, k) || Object.create(null));
}
}
// noinspection JSUnusedLocalSymbols
export function inheritPropertyInitializers(target, clazz,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
isPropertyInherited = (key) => true) {
try {
const tempInstance = new clazz();
const propertyNames = Object.getOwnPropertyNames(tempInstance);
propertyNames
.filter(propertyName => typeof tempInstance[propertyName] !== 'undefined' &&
typeof target[propertyName] === 'undefined')
.filter(propertyName => isPropertyInherited(propertyName))
.forEach(propertyName => {
target[propertyName] = tempInstance[propertyName];
});
}
catch {
//
}
}