2016-09-26 3 views
2

Ich bin mir nicht sicher, warum mein Code nicht läuft, kann mir jemand eine Richtung geben? Wenn ich diesen Code ausführen und überprüfen Sie die Konsole ich den FehlerWie verbinde ich Funktion für eine anonyme Funktion

„Uncaught Typeerror: (Zwischenwert) (Zwischenwert) (Zwischenwert) ist keine Funktion“

var person = { 
    firstName: "Jane", 
    lastName: "Doe", 
    getFullName: function() { 
    var fullName = this.firstName + this.lastName; 
    return fullName; 
    } 
} 

(function() { 
    console.log(this.getFullName()); 


}).bind(person); 
+3

Denken Sie daran, dass '.bind (Person)' ist die Funktion nicht aufrufen, sondern eine neue Funktion zurückzukehren. Hinzufügen von '(function() {...}). Bind (person)()' und Ausführen des Codes in der Chrome Developer Tools-Konsole druckt den Namen wie erwartet ... – forrert

+0

@forrert Ich bekomme den gleichen Fehler. –

Antwort

6

Das Problem ist, dass Ihnen fehlt ein Semikolon (;). Ohne das Semikolon am Ende Ihrer Deklaration, übersetzt Ihr Code effektiv dies.

Syntaktisch versuchen Sie, ein Objekt als eine Funktion aufzurufen, dann verwenden Sie das Ergebnis dieser Funktion als eine andere Funktion.

Hier ist Ihr korrigierten Code:

var person = { 
 
    firstName: "Jane", 
 
    lastName: "Doe", 
 
    getFullName: function() { 
 
    var fullName = this.firstName + this.lastName; 
 
    return fullName; 
 
    } 
 
}; 
 

 
// Isn't called because `bind` returns a new function 
 
(function() { 
 
    console.log(this.getFullName()); 
 
}).bind(person); 
 

 
// What you probably want to do 
 
(function() { 
 
    console.log(this.getFullName()); 
 
}).call(person);

+0

Danke, es funktioniert jetzt! –

3

Sie in einem Semikolon und einen Anruf mit Klammer werfen können, weil die var Anweisung nicht beendet ist und das Objekt person versucht wird, zu nennen.

var person = { 
 
     firstName: "Jane", 
 
     lastName: "Doe", 
 
     getFullName: function() { 
 
      var fullName = this.firstName + this.lastName; 
 
      return fullName; 
 
     } 
 
    }; // insert semicolon here 
 

 

 
(function() { 
 
    console.log(this.getFullName()); 
 
}).bind(person)(); // add parenthesis

Verwandte Themen