Object.prototype.__noSuchMethod__

Non standard
Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

Obsolète depuis Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36)
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.

__noSuchMethod__ n'est pas standard, la spécification ECMAScript Harmony (ES6) fournira les objets Proxy qui permettent de réaliser ce qui pouvait être fait avec cette propriété (et plus encore).
 

Résumé

La propriété __noSuchMethod__ fait référence à une fonction à exécuter lorsqu'on appelle une méthode qui n'est pas définie pour un objet.

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.

Note : bien que __noSuchMethod__ ne soit pas standard, ECMAScript 6 a introduit les Proxy qui permettent de réaliser les mêmes actions (voire plus) que cette méthode.

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.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple Pas de support 1.0 (1.7 ou moins) 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 1.0 (1.0) Pas de support Pas de support Pas de support

Cette fonctionnalité sera retirée à l'avenir : voir le bug 683218.

Étiquettes et contributeurs liés au document

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