You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
'use strict';
class Mixin { constructor(host) { const originalMethods = {}; const overriddenMethods = this._getOverriddenMethods(this, originalMethods);
for (const key of Object.keys(overriddenMethods)) { if (typeof overriddenMethods[key] === 'function') { originalMethods[key] = host[key]; host[key] = overriddenMethods[key]; } } }
_getOverriddenMethods() { throw new Error('Not implemented'); } }
Mixin.install = function(host, Ctor, opts) { if (!host.__mixins) { host.__mixins = []; }
for (let i = 0; i < host.__mixins.length; i++) { if (host.__mixins[i].constructor === Ctor) { return host.__mixins[i]; } }
const mixin = new Ctor(host, opts);
host.__mixins.push(mixin);
return mixin; };
module.exports = Mixin;
|