Hallo,
Und zwar kann man es auch so in der Art schreiben?
Object.prototype= {
indexOf:function(){}
}
> anstatt jedesmal:
> ~~~javascript
> Object.prototype.indexOf= function(){
> }
>
zu schreiben?
Ja, kann man – allerdings hat das gewisse Auswirkungen. Ob man die in Kauf nehmen will, hängt vom konkreten Fall ab.
Zum Vergleich:
1. Konstruktor.prototype.eigenschaft = wert;
- Dies *erweitert* den Prototyp aller *bestehenden* und *zukünftigen* Instanzen, die der Konstruktor erzeugt hat oder erzeugen wird.
- Wenn du eine Funktion erzeugst, hat sie bereits eine prototype-Eigenschaft. Darin steckt bereits ein einfaches Objekt, welches
a) eine constructor-Eigenschaft hat, die auf die Konstruktorfunktion zeigt,
b) einen eigenen Prototypen besitzt (interner [[Prototype]]-Verweis, in einigen Browsern als __proto__ sichtbar). Das ist üblicherweise Object.prototype, kann aber bei Vererbung auch ein anderes Objekt sein, z.B. SuperConstructor.prototype. - Bei der Erweiterung von Konstruktor.prototype bleiben alle vorher gesetzten Eigenschaften wie constructor sowie der interne Prototyp-Verweis intakt.
2. Konstruktor.prototype = {…};
- Dies *setzt* den Prototypen für alle Objekte, die *in Zukunft* mit dem Konstruktor erzeugt werden.
- Sofern du nicht explizit eine constructor-Eigenschaft notierst, so geht diese verloren. Zudem geht eine spezielle Vererbung verloren, denn der Prototyp des Objekt-Literals ist nur Object.prototype.
- Alle bisher mit dem Konstruktor erzeugte Instanzen *behalten* ihren alten Prototypen.
Diese Unterschiede spielen nicht unbedingt eine Rolle. Wenn du nirgends auf die constructor-Eigenschaft zugreifst, keine besondere Vererbung aufsetzt und vorher keine Instanzen erzeugst, kannst du die prototype-Eigenschaft überschreiben.
Andernfalls ist die Schreibweise Konstruktor.prototype.eigenschaft = wert
vielseitiger und defensiver.
Hintergrund:
http://molily.de/javascript-core/
http://molily.de/js/organisation-instanzen.html
http://molily.de/weblog/javascript-pseudoklassen
http://www.2ality.com/2012/01/js-inheritance-by-example.html
http://www.2ality.com/2013/01/two-prototypes.html
Grüße,
Mathias