Kann mir jemand sagen, warum wir .prototype. verwenden, während wir mit JavaScript arbeiten?

Ich komme dazu, als ich mit Google Map API gearbeitet habe.
In dem (nur ein Beispiel) verwenden wir google.maps.Marker.prototype.setPosition, während die Klasse nur google.maps.Marker ist.

1
Jaykishan 27 Nov. 2013 im 17:42

3 Antworten

Beste Antwort

(angepasst) Warum verwenden wir google.maps.Marker.prototype.setPosition?

Kurz gesagt, jedes mit new google.maps.Marker(/* params */) erstellte Objekt hat Zugriff auf die dort definierte Eigenschaft setPosition (sofern es nicht überschrieben wird):

google.maps.Marker.prototype.setPosition = function() { return 42; }

var x = new google.maps.Marker();
x.setPosition(); // 42

var y = new google.maps.Marker();
y.setPosition(); // 42

x.setPosition = function() { return 'Overriden only for x'; };    
x.setPosition(); // Overriden only for x
y.setPosition(); // 42

Die Funktionsweise wird unter MDN erläutert. Der Kern davon ist, dass new ein Objekt erstellt, das (über die Prototypenkette) von der prototype -Eigenschaft des Konstruktors erbt.

2
Tibos 27 Nov. 2013 im 13:55

Die meisten Programmierer, die mit C ++ oder Java vertraut sind, bevor sie Javascript lernen

Daher möchten sie Javascript wie in Java und C ++ verwenden, um die vier Konzepte zu simulieren: statisches Feld von

Klasse. statische Methode der Klasse. Instanzfeld des Objekts, Methode des Objekts

Um die Objektmethode zu simulieren, wird normalerweise die Prototyp-Eigenschaft des Konstruktors verwendet

function Book (name) {
  this.name = name;
}

Book.prototype.getName = function () {
  return this.name;
}

var b = new Book("javascript");

console.log(b.getName()); // javascript

http://jsfiddle.net/98yPb/ Dies ist die Demo

2
qiu-deqing 27 Nov. 2013 im 13:59

Wir verwenden den Prototyp, wenn wir eine Eigenschaft in der gesamten Klasse (wie die statische Eigenschaft in C ++) anstatt nur in einem einzelnen Objekt ändern müssen.

Prototyp ist der Weg, um auf statische Eigenschaften und Funktionen der Klasse zuzugreifen ...

1
zag2art 27 Nov. 2013 im 13:56