Fondamentalement, est-il un bon mécanisme élégant pour émuler super
avec la syntaxe est aussi simple que l'une des opérations suivantes
this.$super.prop()
this.$super.prop.apply(this, arguments);
Les critères à respecter sont :
this.$super
doit être une référence pour le prototype. c'est à dire si je change le super prototype au moment de l'exécution de ce changement pourra être répercuté. Ceci signifie fondamentalement, il le parent a une nouvelle propriété, alors cela devrait être indiqué au moment de l'exécution sur tous les enfants par le biaissuper
tout comme une codés en dur de référence à la société mère de refléter les changementsthis.$super.f.apply(this, arguments);
doivent travailler pour les appels récursifs. Pour toute enchaînés ensemble de l'héritage où plusieurs super les appels sont faits que vous allez en haut de la chaîne d'héritage, vous ne devez pas frapper le récursive problème.- Vous ne devez pas coder en dur des références à des super objets de vos enfants. I. e.
Base.prototype.f.apply(this, arguments);
de défaites le point. - Vous ne devez pas utiliser un X à compilateur JavaScript ou des scripts JavaScript de préprocesseur.
- Doit être conforme ES5
L'implémentation naïve serait quelque chose comme ceci.
var injectSuper = function (parent, child) {
child.prototype.$super = parent.prototype;
};
Mais cela rompt la condition 2.
Le plus élégant mécanisme que j'ai vu à ce jour est IvoWetzel de l' eval
hack, qui est à peu près un JavaScript préprocesseur et échoue donc les critères 4.