2017-12-18 9 views
0

Ich versuche, den Namen des Elements innerhalb des Objekts zurückzugeben. Das zweite Element ist die Funktion getBook(), die den Namen des Buches zurückgeben sollte, aber ich bekomme undefined in meiner Konsole. Ich habe den zweiten Variablengetnamen definiert, der auf die Funktion innerhalb des Objekts verweist. Ich bin mir nicht sicher, ob ich this.element zurückgeben kann. Wenn jemand erklären kann, warum mein Code versagt, würde ich das schätzen. Vielen Dank.Funktion innerhalb eines Objekts definiert gibt den Wert nicht zurück?

Antwort

2

Sie müssen bind() Bücher zum getName-Funktion Ausdruck. Andernfalls wird der Kontext der this wird das window Objekt verweisen:

var books = { 
 
    name: 'Goodnight Moon', 
 
    getBook() { 
 
    return this.name; 
 
    } 
 
}; 
 

 
var getName = books.getBook.bind(books); 
 
console.log(getName());

+0

Carl, vielen Dank für die Zeit nehmen zu reagieren. Bitte, würdest du mir erklären, warum wir bind verwenden müssen und warum mein ursprünglicher Code für die Rückgabe undefiniert ist? –

+1

Ich habe meine Antwort aktualisiert. Lass es mich wissen, wenn es weitere Erklärungen benötigt. –

+0

@espresso_coffee: Denken Sie an "das" als einen anderen Funktionsparameter. Je nachdem, wie die Funktion aufgerufen wurde, wird sie vom Aufrufer auf einen bestimmten Wert gesetzt. Sie können es auch manuell einstellen, wenn Sie wie 'getName.call (books) 'aufrufen, oder wie oben gezeigt, können Sie eine neue Funktion mit' .bind() 'erstellen, deren Wert permanent als Wert von' this' gebunden ist. –

0

Natürlich könnte man einfach tun

// same object definition 
 
var books = { 
 
    name: 'Goodnight Moon', 
 
    getBook() { 
 
     return this.name; 
 
    } 
 
}; 
 

 
// but call: 
 
books.getBook(); 
 
console.log(books.getBook());

Verwandte Themen