Supposons que j'ai un objet X
défini comme
var X = function () {}; X.prototype.doSomething = function () {}; X.prototype.doSomethingElse = function () {};
Est-il possible de construire une fonction f
sorte que f instanceof X
? Notez que je dois également pouvoir faire f()
sans TypeError
.
Dans Mozilla, je peux faire exactement ce que je veux avec __proto__
:
var f = function () {}; f.__proto__ = new X;
Cependant, c'est (1) non standard et (2) obsolète. La page de MDN pour __proto__
suggère d'utiliser Object.getPrototypeOf
place, mais ce que je recherche vraiment, c'est Object.setPrototypeOf
(qui n'existe pas, bien que l'idée soit soulevée dans ce rapport de bogue ).
Une approximation peu coûteuse de ce que je veux est
var f = function () {}; jQuery.extend(f, new X);
Malheureusement, cela ne rend pas f instanceof X
true (et je ne m'attends pas à ça!).
Non, ce n'est pas possible (de manière standard). Toute possibilité de créer un objet appelable (c.-à-d., Une fonction) créera un élément héritant de Function.prototype
1 ; Et vous ne pouvez pas changer le [[prototype]]
d'un objet ensuite 2 .
Voir également:
1: OK, ES6 nous permet de sous- classer la Function
. Mais ce n'est pas aussi utile qu'il le semble.
2: Depuis ES6, vous pouvez utiliser Object.setPrototypeOf
.