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.