Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Object.prototype.__noSuchMethod__

Obsolète
Cette fonctionnalité est obsolète. Bien qu'encore supportée par des navigateurs, son utilisation est découragée pour tout nouveau projet. Évitez de l'utiliser.

La propriété __noSuchMethod__ était utilisée pour faire référence à une fonction qui devait être utilisée lorsqu'on appelait une méthode inexistante d'un objet. Cette fonction n'est plus disponible.

Si __noSuchMethod__ a été abandonnée, la spécification ECMAScript 2015 (ES6) fournit les objets Proxy qui permettent de réaliser ce qui pouvait être fait avec cette propriété (et plus encore).

Syntaxe

obj.__noSuchMethod__ = fun

Paramètres

fun
Une fonction de la forme
function (id, args) { . . . }
id
Le nom de la méthode qui n'est pas définie pour l'objet et qui a été appelée.
args
Le tableau d'arguments passé à la méthode.

Description

Par défaut, lorsqu'on appelle une méthode qui n'existe pas pour un objet, cela lève une exception TypeError. Ce comportement peut être modifié en définissant une fonction pour la propriété __noSuchMethod__. Cette fonction prend en compte deux arguments : le premier qui est le nom de la méthode non définie qui a été appelée et le second qui correspond au tableau des arguments passés lors de l'appel. Le deuxième argument est bien un tableau (il hérite de Array.prototype) et n'est pas un objet semblable à un tableau comme l'objet arguments.

Si cette méthode ne peut être appelée, soit parce qu'elle vaut undefined (sa valeur par défaut), soit parce qu'elle a été supprimée ou définie avec une valeur qui n'est pas une fonction, le moteur JavaScript reprendra le comportement par défaut et renverra des exceptions TypeError.

Exemples

Un test simple avec __noSuchMethod__

var o = {
  __noSuchMethod__: function(id, args) { 
                     console.log(id, '(' + args.join(', ') + ')');
                    }
};

o.toto(1, 2, 3);
o.truc(4, 5);
o.machin();

// affichera
// toto (1, 2, 3)
// truc (4, 5)
// machin ()

Spécifications

Cette propriété ne fait partie d'aucune spécification et a été retirée : voir le bug 683218.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple Pas de support Pas de support [1] Pas de support Pas de support Pas de support
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple Pas de support Pas de support Pas de support [1] Pas de support Pas de support Pas de support

[1] Cette fonctionnalité était implémentée jusqu'à la version 43.

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, teoli, Jeremie, BenoitL
 Dernière mise à jour par : SphinxKnight,