Deux manières, mais légèrement différentes
1. en opérateur
Copiez le code comme suit :
var obj = {nom : 'jack'} ;
alert('nom' dans obj); // --> vrai
alert('toString' dans obj); // --> true
On peut voir que name et toString sur la chaîne prototype peuvent être détectés et renvoyer true.
2. Méthode hasOwnProperty
Copiez le code comme suit :
var obj = {nom : 'jack'} ;
obj.hasOwnProperty('nom'); // --> vrai
obj.hasOwnProperty('toString'); // --> false
Les propriétés héritées de la chaîne de prototypes ne peuvent pas être détectées via hasOwnProperty et false est renvoyé.
Il convient de noter que bien que in puisse détecter les propriétés de la chaîne prototype, in ne le peut généralement pas.
Bien entendu, après avoir réécrit le prototype, celui-ci sera visible sous IE9/Firefox/Safari/Chrome/Opera. Voir : Les pièges du for in