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 43 (Firefox 43 / Thunderbird 43 / SeaMonkey 2.40)
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
No compatibility data found. Please contribute data for "javascript.builtins.Object.noSuchMethod" (depth: 1) to the MDN compatibility data repository.