Duas maneiras, mas um pouco diferentes
1. no operador
Copie o código do código da seguinte forma:
var obj = {nome:'jack'};
alerta('nome' em obj); // --> verdadeiro
alerta('toString' em obj); // --> verdadeiro
Pode-se ver que tanto name quanto toString na cadeia de protótipos podem ser detectados e retornar verdadeiros.
2. Método hasOwnProperty
Copie o código do código da seguinte forma:
var obj = {nome:'jack'};
obj.hasOwnProperty('nome'); // --> verdadeiro
obj.hasOwnProperty('toString'); // --> falso
As propriedades herdadas na cadeia de protótipos não podem ser detectadas por meio de hasOwnProperty e false é retornado.
Deve-se notar que embora in possa detectar as propriedades da cadeia de protótipos, for geralmente não consegue.
Claro, depois de reescrever o protótipo, for in ficará visível no IE9/Firefox/Safari/Chrome/Opera. Veja: Armadilhas do for in