2010-11-10 9 views
5

Auch wenn ich viel darüber gelesen habe, kann ich den Prototyp nicht verstehen.Prototypen in Javascript

Warum gibt es eine String und String.prototype?

Wenn ich "cat" haben:

  • Ist das ein String oder ein Object?
  • Erbt es alle Eigenschaften/Methoden von String oder String.prototype?
  • Warum gibt es eine String und String.prototype?
  • Sollte ich String die String Objekt und String.prototype String-Prototyp aufrufen?

Bitte bringen Sie Klarheit zu diesem Thema.

Antwort

10

Ich beantworte dies, weil es ist viel von Fehlinformationen in dem Betreff:

Ist das eine Zeichenfolge oder ein Objekt?

Nr"cat" ist ein primitive String Wert:

typeof "cat"; // "string", a String value 
"cat" instanceof String; // false 


typeof new String("cat"); // "object", a String object 
new String("cat") instanceof String; // true 

ich später über Typen und primitive Werte sprechen.

Erbt es alle Eigenschaften/Methoden von String oder String.prototype?

Nun, wenn Sie den property accessor operator (der Punkt oder die Klammer-Notation) verwenden, wird der Grundwert implizit intern Objekt umgewandelt, damit alle Methoden auf String.prototype stehen zur Verfügung, zum Beispiel:

Wenn Sie Zugriff auf:

"cat".chatAt(0); 

Hinter den Kulissen "cat" zum Objekt umgewandelt wird:

Object("cat").chatAt(0); 

Aus diesem Grund haben Sie Zugriff auf alle geerbten Eigenschaften für Werte.

Warum gibt es einen String und String.prototype?

String ist ein Konstruktor-Funktion ermöglicht es Ihnen, String-Objekte oder tun Typumwandlung zu erstellen:

var stringObj = new String("foo"); // String object 

// Type conversion 
var myObj = { toString: function() { return "foo!"; } }; 

alert(String(myObj)); // "foo!" 

Das String.prototype Objekt ist das Objekt, in dem String-Objekt-Instanzen von erben.

Ich weiß, es ist verwirrend, wir haben String-Werte und String-Objekte, aber die meiste Zeit arbeiten Sie eigentlich nur mit String-Werten, sorgen Sie sich jetzt nicht um String-Objekte.

Soll ich String das String-Objekt und String.prototype den String-Prototyp aufrufen?

Sie sollten String"The String constructor" anrufen.

"String-Prototyp" ist in Ordnung.

Sie sollten wissen, dass "Alles ist NICHT ein Objekt".

Lassen Sie uns über Typen, sprechen gibt es fünf language types angegeben:

  • String
  • Anzahl
  • Boolean
  • Null
  • undefiniert

Ein primitive value ist "ein Datum, das direkt auf der untersten Ebene der Sprachimplementierung dargestellt wird", die einfachste Information, die Sie haben können.

Die Werte der zuvor beschriebenen Typen können sein:

  • Null: Der Wert null.
  • Nicht definiert: Der Wert undefined.
  • Nummer: Alle Nummern, wie 0, 3.1416, 1000, etc .. Auch NaN und Infinity.
  • Boolean: Die Werte true und false.
  • Zeichenfolge: Jede Zeichenfolge, z. B. "cat" und "bar".
+0

Ich stimme Ihnen mit der "string" und new String() Unterschied, ich gebe zu, dass ich das nicht wusste. Aber ich stimme dem Teil des Datums und der Objekte nicht zu.Vielleicht sind Strings, Booleans und Zahlen keine Objekte, aber sie werden als Objekte in JS dargestellt und wenn Sie etwas wie String instanceof Object tun, ist das Ergebnis wahr. – mck89

+0

@ mck89, ich meinte, dass ein primitiver Wert das einfachste Datenelement ist, das man haben kann, ja, man kann sie als Objekte behandeln (zB Zugriff auf vererbte Eigenschaften, "foo" .chatAt' oder "5 .. toFixed), aber sie sind immer noch nur Werte, keine Objekte. Über 'String instanceof Object' ist offensichtlich, weil' String' ein * Function-Objekt * ist, das von 'Function.prototype' erbt, das von' Object.prototype' erbt, daher gibt 'String instanceof Function' Ihnen auch' true' '. – CMS

3

Strings sind Objekte in JavaScript. Es gibt keinen echten Datentyp namens String wie in PHP, C oder anderen Sprachen.

String.prototype ist ein Konstrukt, um allen Ihren String-Objekten Funktionalität hinzuzufügen. Wenn Sie alle Strings zum Beispiel eine Konvertierungsfunktion anbieten möchten tun Sie Folgendes:

String.prototype.convert = function() { 
    // Put your code in here 
} 

// Set up y new String 
var example = "cat"; 

// Now you can call your function 
example.convert(); 
+1

Das stimmt nicht, JavaScript hat einen String-Typ, '" cat "' ist ein [** primitiver Wert **] (http://bclary.com/2004/11/07/#a-4.3. 2). JavaScript kann auch * String-Objekte * haben, aber das Konzept ist anders, sie sind einfach eingepackte Primitive, z.B. 'alert (typeof" foo "); // "string" ',' alert (Objekttyp ("cat")) // "Objekt" '. Überprüfen Sie [meine Antwort] (http://stackoverflow.com/questions/4142230/prototypes-in-javascript/4142624#4142624). – CMS

Verwandte Themen