Pouvez-vous faire un objet "appelable'?
Est-il possible de faire un objet appelable par la mise en œuvre soit call
ou apply
sur elle, ou de quelque autre façon? E. g.:
var obj = {};
obj.call = function (context, arg1, arg2, ...) {
...
};
...
obj (a, b);
- Non, ce n'est pas possible. Un objet doit être "né" callable comme un instancié de la fonction.
- double possible de le Constructeur pour objet appelable en JavaScript
- pas vraiment, ma question est à propos de faire un objet existant appelable, pas d'en créer un nouveau.
Vous devez vous connecter pour publier un commentaire.
Non, mais vous pouvez ajouter des propriétés sur une fonction, par exemple
EDIT: pour "faire" un objet appelable, vous aurez encore à faire la-dessus, mais il pourrait ressembler à quelque chose comme:
Et puis vous auriez suffit d'utiliser le "func" de la fonction à la place de l'objet. Vraiment tout ce que cette méthode n'est la copie de propriétés entre les deux objets, mais...il pourrait vous aider.
obj[Symbol.invoke] = function(args) { };
Object.setPrototypeOf(func, object)
?ES6
a une meilleure solution pour cela. Si vous créez des objets de manière différente (à l'aide declass
,extend
ing "Fonction" type de), vous pouvez avoir un callable instance.Voir aussi: Comment étendre la Fonction avec ES6 classes?
extends
par "classe", si vous préférez l'utiliser pour faire une solution de contournement pour la langue, la réutilisation de code, vous devriez probablement être agrégé à l'intérieur de la classe ou devrait l'utiliser que pour une connexion naturelle dans le domaine des objets?Suivant la même ligne de @Max, mais en utilisant ES6 extensions
Object
pour passer toutes les propriétés et le prototype d'un objetobj
à la appelablefunc
.