Ich weiß, dass die prototype
Eigenschaft von JavaScript-Funktionsobjekten wird in die interne [[Prototype]]
Eigenschaft (auch bekannt als __proto__
) von Objekten, die durch Verwendung der Funktion als Konstruktor instanziiert werden. Ich kann diese Eigenschaft also auf ein beliebiges Objekt setzen, das als Prototyp fungieren soll:
function Foo() {}
Foo.prototype = {
toString: function() { return "I'm a Foo!"; }
}
new Foo().toString()
// --> "I'm a Foo!"
Es scheint eine weit verbreitete Praxis zu sein, Funktionen, die als Klassenmethoden fungieren sollen, der bestehende Prototyp von neu erzeugten Funktionen wie dieser:
function Bar() {}
Bar.prototype.toString = function() {
return "I'm a Bar!";
}
new Bar().toString()
// --> "I'm a Bar!"
Es ist mir allerdings unklar, was die Anfangswert der prototype
Eigenschaft ist.
function Baz() {}
Baz.prototype
// --> Baz {
// constructor: function Baz() {},
// __proto__: Object
// }
Der Kommentar zeigt, was die JavaScript-Konsole von Chrome ausgibt. Heißt das, dass jede Funktion, die ich erstelle, tatsächlich eine dos Objekte? Eines für die Funktion selbst (das constructor
) und eine für seinen Prototyp?
Ist dies irgendwo in der ECMAScript-Norm definiert? Ich habe versucht, es zu finden, konnte es aber nicht. Behandeln alle Browser dies auf dieselbe Weise?