JS étendu dynamiquement j'ai une classe ES6 de base que je transmets donné dynamiquement un objet de configuration, comme ceci:Référencer membres statiques de méthode d'instance sur la classe
class Model {
constructor() {
// ...
}
save() {
// ...
}
}
function createModelFromConfig (config) {
const Impl = class extends Model {};
Object.assign(Impl, config);
return Impl;
}
const User = createModelFromConfig({store: new DbStore()});
Dans la méthode save()
sur le modèle abstrait, je d aiment faire référence à l'objet statique store
, qui existera sur la classe qui étend Model. Cela signifie, bien sûr, que j'ai besoin de référencer un membre statique mais que la classe étendue est anonyme.
Juste un test rapide en utilisant la console Chrome, j'ai essayé
function X() {}
X.prototype.doSomething = function() { console.log(this.constructor); };
function Y() {}
Y.prototype = Object.create(X.prototype);
new Y().doSomething(); // function X() {}
Je ne sais pas si cela est un test fiable, mais il semble que this.constructor
ne fait pas référence à la Impl que j'étendu, mais au lieu de la classe de base d'origine, ce qui n'est pas utile.
Un moyen moins élégant est d'ajouter Impl.prototype.Impl = Impl;
afin que je puisse utiliser this.Impl.store
dans ma fonction de sauvegarde, mais il serait préférable si je pouvais accéder aux membres statiques de la classe Impl sans cela.
Mon test prototypique dans la console est-il inadéquat? Ou existe-t-il un autre moyen d'accéder à la classe constructeur dans une méthode d'instance à partir d'une méthode héritée?