2016-05-15 11 views
0

Wie hat ein benutzerdefiniertes Objekt Zugriff auf Methoden wie .toString() Methode, die eine Object-Methode ist. Wie eine benutzerdefinierte Klasse zu einem ObjektWie erben benutzerdefinierte Objekte vom JavaScript-Objekt

This Artikel besagen

Alle Objekte letztlich das Object-Konstruktor verknüpft ist am Ende ihrer Prototypkette haben. Dies bedeutet, dass alle Methoden oder Eigenschaften, die der Object-Eigenschaft hinzugefügt wurden, automatisch für alle Objekte verfügbar sind. Wenn wir rufus.toString() aufgerufen haben, würde Javascript das Rufus-Objekt prüfen, dann das Cat-Objekt und dann das Pet-Objekt . Im vorherigen Beispiel würden wir rufus.toString() aufrufen. Das Prototyp des Pet Objekts wurde mit dem Objekt Konstruktor erstellt (mit der Objektliteral Abkürzung) so Javascript würde dann die Methode toString() Prototyp nach dem Lesen durch den Artikel

Nun, da ich verstehe, findet auf dem Objekt um Um von einem Objekt zu erben, müssen wir im Prototyp des Funktionskonstruktors eines Objekts das Objekt angeben, von dem wir erben möchten. Jetzt lese ich, dass die Prototyp-Eigenschaft standardmäßig leer ist. Wie kann dann ein Objekt die Eigenschaft toString() haben? Ich habe nicht die Aussage

Die Pet Objekts verstehen Prototyp mit dem Object-Konstruktor erstellt wurde (die Objektliteral Kürzel)

Update:

ich, dass der Prototyp Eigenschaft gelesen von Die Konstruktorfunktion ist standardmäßig leer. Ich las, dass here ich das Zitat hier

Zuerst eingefügt haben, jede JavaScript-Funktion einen Prototyp Eigenschaft hat (diese Eigenschaft ist standardmäßig leer), und Sie legen Eigenschaften und Methoden auf diesem Prototyp Eigenschaft, wenn Sie wollen Vererbung implementieren.

Wie erben wir dann von dem Javascript-Objekt?

+0

* Jetzt habe ich gelesen, dass die Prototyp-Eigenschaft standardmäßig leer ist. * Wo hast du das gelesen? Beachten Sie, dass der Prototyp eines Objekts ** nicht ** der Prototypeigenschaft entspricht (normalerweise einem Konstruktor zugeordnet). –

+0

@torazaburo können Sie das ein wenig erklären. Können Sie den Unterschied zwischen dem Prototyp eines Objekts und der Prototypeigenschaft erklären? Ich denke, dass ich sie mische. –

+0

Ja, ich denke auch du bist. Im Internet gibt es bessere Erklärungen als in einem Absatz. Suche nach "Unterschied zwischen Prototyp und' __proto__' "oder so ähnlich. –

Antwort

3

Alle Objekte erben die Eigenschaften von Object über prototypische Vererbung. Wenn Sie das tun:

var b = {}; 
console.log(b.__proto__) 

können Sie alle Eigenschaften von Object geerbt sehen.

Also, was passiert ist, dass, wenn Sie b.toString() tun, ist es für die toString() Funktion auf b aussehen wird, dann wird es halten die Prototypkette hinauf und schließlich Object erreichen, die diese Funktion hat.

EDIT:

Funktion Konstrukteurs vs Objekte:

Nur um zu klären, eine Funktion Konstruktor definiert wie:

var a = function() { 
    this.b = "b"; 
    this.c = "c"; 
} 

hat seinen Prototyp function gesetzt. Dies kann überprüft werden, indem Sie console.log(a) tun.

Allerdings verwenden wir a neue Objekte wie folgt zu erstellen:

var d = new a(); 

Und diese Objekte haben ihren Prototyp auf Object gesetzt, die wiederum von console.log(d) tun prüft werden kann.

Mehr Details here.

+0

Ich habe gelesen, dass die __proto__ Eigenschaft eine Referenz auf die Prototyp-Eigenschaft ist und die Prototyp-Eigenschaft standardmäßig leer ist, sofern nicht explizit angegeben. Wie kann ein benutzerdefiniertes Objekt dann implizit von "Object" erben? –

+0

Wo hast du das gelesen? Für ein detailliertes Verständnis siehe https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype –

+0

Ich aktualisierte meinen Beitrag und beantwortete Ihre Frage –

0

von JavaScript Bezug The Definitive Guide:

Alle von Objektliterale erstellten Objekte, dh {} denselben Prototyp-Objekt haben, und wir können in JavaScript-Code zu diesem Prototyp-Objekt beziehen Object.prototype. Objekte, die mit dem Schlüsselwort new und einem Konstruktoraufruf erstellt wurden, verwenden den Wert der Eigenschaft der Konstruktorfunktion als ihren Prototyp. Das von new Object() erstellte Objekt erbt also genauso wie das von {} erstellte Objekt Object.prototype. Auf ähnliche Weise verwendet das von new Array() erstellte Objekt Array.prototype als seinen Prototyp, und das von new Date() erstellte Objekt verwendet Date.prototype als seinen Prototyp.

So werden alle Objekte, die {} Literalen erstellt verwenden, werden Object.prototype als Prototyp haben und haben Zugriff auf von Object.prototype zum Beispiel definierten Methoden toString() etc etc.

Der new Operator verwendet wird, um neue Objekte zu erstellen und initialisieren . Das Schlüsselwort new muss mit einem Funktionsaufruf verwendet werden. Wenn ein Funktionsaufruf mit dem Schlüsselwort new verwendet wird, wird er Konstruktoraufruf aufgerufen.

Objekte, die mit new und Funktionsaufruf erstellt wurden, erben von der -Eigenschaft von Konstruktoren. So werden Objekte, die mit new Date() erstellt wurden, von Date.prototype erben und Objekte, die mit new Array() erstellt wurden, erben von Array.prototype.

Sie können diese -Eigenschaft ändern, um Objekte von Ihren eigenen benutzerdefinierten Objekten zu erben. Zum Beispiel

function myFunction() { 
    this.name = 'a'; 
    this.age = 20; 
} 

myFunction.prototype = { 
    toString: function() { 
     // you can override default toString() method here.. 
    }, 

    // you can define as many functions here as you want. 
}; 

var myObj = new myFunction(); 

Objekt myObj wird von myFunction.prototype erben und alle in diesen Objekten definierten Methoden werden myObj zur Verfügung.

EcmaScript5 definiert eine neue Methode Object.create() zum Erstellen von Objekten haben einen anderen Prototyp als Object.prototype. Zum Beispiel

var prototypeObject = {a: 1, b: 2, c: 3}; 
var obj1 = Object.create(prototypeObject); 

Jetzt obj1' will inherit from prototypeObject‘und nicht von Object.prototype

0

Sie

fragte

Wie funktioniert eine benutzerdefinierte erstellte Objekt Zugriff auf Methoden wie .toString() -Methode, die eine Objektmethode Wie wird eine benutzerdefinierte Klasse mit einem Objekt verbunden

Aus der Lektüre, was Sie auf dem Laufenden Sie über thunk es schien. Sie haben es, dann haben Sie ungot es. Um die Frage ohne Code zu beantworten.

Bei der Programmierung erben alle Objekte von einem Standardobjekt. Stellen Sie sich dies als JavaScripts Vorlage vor, es muss mit etwas anfangen und es hat grundlegende Eigenschaften und Methoden und Sie bauen darauf auf. Jedes Objekt hat unterschiedliche Basiseigenschaften. Ich habe in einem früheren Post gesagt, dass die Prototyp-Kette hier endet, aber das ist nicht ganz genau, da die Prototyp-Kette in Null endet.

Verwandte Themen