Prototypen in JavaScript [] (Prototypen in JavaScript), Lektion, Seite 723189
https://www.purl.org/stefan_ram/pub/prototypen_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Prototypen in JavaScript

Erklärung des Verfahrens zum Aufsuchen einer Definition (Prototypen)

Es kommt vor, daß viele verschiedene Objekte dieselbe Methode enthalten sollen. Beispielsweise sieht man, daß die folgenden verschiedenen String-Objekte alle eine Methode charAt enthalten.

Debugger
new String( "abc" ).charAt( 0 ) // "a" // 
new String( "alpha" ).charAt( 0 ) // "a" //
new String( "anton" ).charAt( 0 ) // "a" //

Es wäre unökonomisch, die Methode »charAt« nun immer wieder in jedem String-Objekt abzuspeichern.

Stattdessen enthalten alle String-Objekte einen Verweis  auf ein Objekt, in welcher die String-Methoden gespeichert sind. Dieses Objekt wird der Prototyp  jener Objekte genannt.

Ruft man nun eine Methode, wie »charAt« auf, welche in dem Zielobjekt (dem Objekt, das links vom Punkt angegeben ist) nicht gefunden wird, so sucht JavaScript im Prototyp nach einer Definition.

In den obigen Beispielen wird die charAt-Methode gefunden, weil sie im Prototyp der Objekte enthalten ist. (Sie ist nicht in den Objekten selber enthalten.)

Der Konstruktor kennt diesen Prototyp und trägt ihn bei der Objekterzeugung mit new in die Objekte ein. Jeder Konstruktor hat eine Prototyp-Definition, deren Wert den von jenem Konstruktor erzeugten Objekten als Prototyp zugewiesen wird.

Da der Prototyp nicht in einer intuitiven Weise angezeigt wird, ist es am besten, sich zur anschaulichen Darstellung eines Prototyps den Namen des Konstruktors anzeigen zu lassen, von dem er in das Objekt eingetragen wurde.

Debugger

Object.getPrototypeOf( new String( "abc" )) // [object String] //
Object.getPrototypeOf( new String( "abc" ))=== Object.getPrototypeOf( new String( "alpha" )) // true //
Object.getPrototypeOf( new String( "abc" ))=== Object.getPrototypeOf( new String( "anton" )) // true //
Object.getPrototypeOf( new String( "alpha" ))=== Object.getPrototypeOf( new String( "anton" )) // true //
Object.getPrototypeOf( new Number( 123 )) // [object Number] //
Object.getPrototypeOf( new String( "alpha" ))=== Object.getPrototypeOf( new Number( 123 )) // false //

( new String( 1 )).toString === String.prototype.toString // true //
( new Number( 1 )).toString === Number.prototype.toString // true //
( new Number( 1 )).toString === String.prototype.toString // false //
( new Object( 1 )).toString === String.prototype.toString // false //

Object.prototype.toString.apply( new String( "abc" )) // "[object String]" //
Object.prototype.toString.apply( Object.getPrototypeOf( new String( "abc" ))) // "[object String]" //

Der Prototyp eines Objekts ist nicht dasselbe wie der Wert seiner Prototypdefinition!

Konsole

let ob2 = new Number( 2 );   // undefined       //
Object.getPrototypeOf( ob2 ) // [object Number] //
ob2.prototype = "zeta"; // "zeta" //
ob2.prototype // "zeta" //
Object.getPrototypeOf( ob2 ) // [object Number] //

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723189 stefan_ram:723189 Prototypen in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723189, slrprddef723189, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/prototypen_javascript