Die hasOwnProperty Methode lässt Sie wissen, ob eine Eigenschaft direkt auf eine Instanz eines Objekts oder geerbt von seiner Prototyp-Kette ist.
Betrachten Sie die folgende
function ObjWithProto() {
this.foo = 'foo_val';
}
ObjWithProto.prototype = {bar: 'bar_val'};
var dict = new ObjWithProto();
dict.foobar = 'foobar_val';
das heißt Sie haben ein Objektdict
mit Eigenschaften foo
und foobar
, die eine Eigenschaft bar
von seinen Prototypkette übernimmt.
Jetzt ist es durchlaufen (eine modifizierte Version) Code
function forEach(dict) {
var key;
for (key in dict) {
if (dict.hasOwnProperty(key)) console.log('has', key, dict[key]);
else console.log('not', key, dict[key]);
}
}
forEach(dict);
Sie
has foo foo_val
has foobar foobar_val
not bar bar_val
Auf diese Weise können Sie separate Objekte sehen, dass ein Objekt selbst hat und die von ihr geerbt hat (die sind in der Regel Methoden, die für die Schleife nicht relevant sind)
Außerdem, wenn Sie jetzt dict.bar = 'new_bar_val';
tun, wird das letzte Ergebnis zuändern, sodass Sie sogar zwischen gleichnamigen Eigenschaften unterscheiden können.
Es ist gut erklärt hier: http://StackOverflow.com/a/136411/27512 – kevingessner
Scheint wie 'Schlüssel' ist global wo ist dieser Code aus, können Sie einen Link zu ihm? – elclanrs
@elclanrs Ich habe mich geirrt. Dieser Code stammt von Chrome utils.js – scusyxx