Ich glaube, Sie in der letzten Zeile gemeint aa.hi
statt aa.hello
.
Es gibt Ihnen undefined
weil die A.prototype
nach das neue Objekt zugeordnet (aa
) bereits erstellt wurde.
In Ihrer zweiten Zeile:
//...
aa = new A;
//...
Dies ein Objekt erstellen wird, die von A.prototype
, in diesem Moment erbt, ist A.prototype
ein einfaches leeres Objekt, das von Object.prototype
erbt.
Dieses Objekt wird durch die interne [[Prototype]]
-Eigenschaft der Objektinstanz aa
referenziert.
Durch das Ändern von A.prototype
danach wird die direkte Vererbungsbeziehung zwischen aa
und diesem Objekt nicht geändert.
In der Tat gibt es keine Standardmethode zum Ändern der internen Eigenschaft [[Prototype]]
, einige Implementierungen bieten Ihnen Zugriff über eine nicht standardmäßige Eigenschaft namens __proto__
.
die erwarteten Ergebnisse erhalten, versuchen:
var A = function A() { this.a = 0 };
A.prototype = { hi:"hello" };
var aa = new A;
aa.hi; // "hello"
woops, machte eine Korrektur – John
entfernt Gruß an aa.hi:, tun Sie es nicht beim nächsten Mal –