Apparemment, il est un idiome en JavaScript pour la mise en œuvre de cette façon des méthodes d'instance à base de classe:function MyClass() {...}; MyClass.prototype = MyClass; - considéré comme nuisible?
function MyClass(){...}
MyClass.prototype.methodA = function(){...}
MyClass.prototype.methodB = function(){...}
...
Pourquoi ne sont pas les personnes qui utilisent cette forme moins bavard à la place:
function MyClass(){...}
MyClass.prototype = MyClass;
MyClass.methodA = function(){...}
MyClass.methodB = function(){...}
Il ne fonctionne évidemment pas si MyClass doit hériter d'une classe de base (dans ce cas, il faut généralement définir le prototype sur une nouvelle instance de la classe de base). Cependant, les hierachies d'héritage profond deviennent rares ces jours-ci (grâce au typage de canard et aux mixins entre autres).
Ai-je raté quelque chose? Est-ce que MyClass.prototype = MyClass rend le .constuctor plus en désordre qu'il ne l'est déjà?
Est-ce qu'il interfère de manière incorrecte avec typeof, ou instanceof, ou même getPrototypeOf()?
Devrait-il être promu ou considéré comme nuisible?
Oui, c'est ce que j'avais l'habitude de faire. Cependant, l'indentation de niveau ajoutée, le "," que j'ai un peu gâché et le fait que je mélange parfois des définitions de fonctions avec des annotations de programmation méta ... m'ont rendu inconfortable avec ce style (je suis revenu à l'idiome .prototype classique, Je trouve une nouvelle solution) – JeanHuguesRobert
BTW: Je ne comprends pas le "problème potentiel" que vous mentionnez, pourriez-vous élaborer sur ce point? Merci. – JeanHuguesRobert
La classe Function dans Javascript a un tas de méthodes sur son propre objet prototype. Si vous ajoutez des méthodes etc. à votre objet fonction, vous ne pourrez pas utiliser ceux de cette instance. En d'autres termes, si vous ajoutez une méthode "call" à votre prototype, rien ne sera capable de faire MyConstructor.call (...) 'et d'obtenir le résultat attendu. – Pointy