C'est prendre le problème à l'envers, le paradigme de la POOP veut que l'on crée un objet à partir d'un prototype, et non pas qu'on réassigne le prototype d'un objet une fois instancié à partir d'un autre prototype. La question à se poser, c'est pourquoi ton objet instancié n'est pas du prototype désiré. S'il s'agit d'un Object, ce n'est pas un problème : c'est même plutôt une recommandation de passer un objet en argument aux fonctions constructeur pour l'initialisation. Et beaucoup de fonctions natives comme JSON.parse() fonctionnent avec des Object, donc le passage en Object est obligatoire. Par contre, pour tous les cas plus complexes de cast d'un objet en un autre, je ne vois pas comment une réattribution dynamique du prototype pourrait être une bonne idée. C'est à la fois moins flexible et moins performant que d'écrire une fonction constructeur spécialement pour le cast désiré, par exemple a = ClassA.fromClassB(b);.