Поддержка наследования классов

This commit is contained in:
Book Pauk
2022-12-11 14:22:39 +07:00
parent 5b7712c274
commit 4f4f226d8c

View File

@@ -17,7 +17,7 @@ export default function(componentClass) {
} }
} }
} else if (prop === '_props') { } else if (prop === '_props') {
comp['props'] = obj[prop]; comp.props = obj[prop];
} }
} else {//usual prop } else {//usual prop
data[prop] = obj[prop]; data[prop] = obj[prop];
@@ -26,23 +26,32 @@ export default function(componentClass) {
comp.data = () => _.cloneDeep(data); comp.data = () => _.cloneDeep(data);
//methods //methods
const classProto = Object.getPrototypeOf(obj);
const classMethods = Object.getOwnPropertyNames(classProto);
const methods = {}; const methods = {};
const computed = {}; const computed = {};
for (const method of classMethods) {
const desc = Object.getOwnPropertyDescriptor(classProto, method); let classProto = Object.getPrototypeOf(obj);
if (desc.get) {//has getter, computed while (classProto) {
computed[method] = {get: desc.get}; const classMethods = Object.getOwnPropertyNames(classProto);
if (desc.set) for (const method of classMethods) {
computed[method].set = desc.set; const desc = Object.getOwnPropertyDescriptor(classProto, method);
} else if ( ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'activated',//life cycle hooks if (desc.get) {//has getter, computed
'deactivated', 'beforeUnmount', 'unmounted', 'errorCaptured', 'renderTracked', 'renderTriggered',//life cycle hooks if (!computed[method]) {
'setup'].includes(method) ) { computed[method] = {get: desc.get};
comp[method] = obj[method]; if (desc.set)
} else if (method !== 'constructor') {//usual computed[method].set = desc.set;
methods[method] = obj[method]; }
} else if ( ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'activated',
'deactivated', 'beforeUnmount', 'unmounted', 'errorCaptured', 'renderTracked', 'renderTriggered',
'setup'].includes(method) ) {//life cycle hooks
if (!comp[method])
comp[method] = obj[method];
} else if (method !== 'constructor') {//usual
if (!methods[method])
methods[method] = obj[method];
}
} }
classProto = Object.getPrototypeOf(classProto);
} }
comp.methods = methods; comp.methods = methods;
comp.computed = computed; comp.computed = computed;