2017-05-28 2 views
0

Ich lerne Javascript in Code Academy. Und ich fand diesen Code:Funktionen mit Objekten in Javascript

// Our person constructor 
function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

// We can make a function which takes persons as arguments 
// This one computes the difference in ages between two people 
var ageDifference = function(person1, person2) { 
    return person1.age - person2.age; 
} 

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference(alice,billy); 

Und es funktioniert und gibt den Unterschied zurück. Ich habe mich jedoch gefragt, warum die Eingabe von Person.alice und Person.billy in ageDifference einen Fehler zurückgibt. Wird das Alter nicht als Person.billy.age und Person.alice.age gespeichert?

+2

'alice' und' billy' sind Objektnamen und sie haben nichts mit der inneren Struktur des Objekts zu tun. Also verweisen 'Person.billy' und' Person.alice' auf nicht vorhandene Felder der Personenklasse (d. H. Prototyp in JavaScript). –

Antwort

2

Kurze Antwort, nein. Person ist der Prototyp (das Analog-aber nicht-gleich als Klasse) für Alice und Billy. Es definiert die Methoden und Felder, die ein neues Objekt dieser Klasse verwenden kann, und ist kein Container für alle Person Objekte, wie Sie meinen.

Der Prototyp Person ist für sich ein Objekt mit eigenen Feldern und Methoden. Person.alice spielt darauf an, dass es ein "Klassenfeld" namens "Alice" gibt, alle Person Objekte werden sich teilen - und hat natürlich nichts mit dem neuen Objekt zu tun, das zufällig in der Variablen "Alice" gespeichert ist.

Untere Zeile, Person.alice/.billy sind beide undefined, und undefined.age wirft einen Fehler.

0

können Sie denken an die Funktion

function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

, wenn sie mit new, als Form verwendet. Es enthält das neue Objekt nicht, baut es nur auf.

0

Person ist nur Schema, wie man ein Objekt erstellt, es ist nicht wie in normalen Programmiersprachen .. Manche Leute sagen, das Javascript ist echte OOP Sprache, weil jeder Typ Objekt ist, und jede Funktion ist Objekt ... es gibt keine Klassen (Schemas, wie man irgendein Objekt erzeugt), shcema für das Errichten irgendeines Gegenstandes ist nicht Klasse des Objekts ... Und wenn du etwas oop concpet simulieren möchtest, mußt du mit Prototyp spielen. sein Bit wierd aber Prototypen sind wie Erweiterungen irgendeines Gegenstandes, mögen du sagst .. dieses Objekt wird auf diesen Ort zeigen und den ganzen Code nehmen wo ich auch poitiere

Verwandte Themen