2017-04-15 3 views
-1

ich versuche, herauszufinden, warum „das“ nicht definiert ist, obwohl die Zuordnung mit Lodash gearbeitet (das Debuggen zeigt, dass dies auf die Funktion beziehen wie erwartet):Typeerror: Kann nicht gesetzt Eigenschaft ‚emailIsValid‘ undefinierter mit ES6

Schöpfung:

validPerson = new Person({ 
     first: "Test", 
     last: "User", 
     email: "[email protected]" 
    }) 

Person Modul:

import _ from 'lodash' 

let pesron = (args) => { 

    _.assignIn(this, args); 

    this.emailIsValid =() => { 
    return this.email && this.email.length > 3 && this.email.indexOf('@') > -1; 
    }; 

}; 

export default person; 

Der Fehler:

TypeError: Cannot set property 'emailIsValid' of undefined 

Und wieder funktioniert die _.assignIn wie erwartet.

Antwort

1

Sie verwenden eine Pfeilfunktion und this ist an nichts gebunden. Arrow-Funktionen können nicht als Konstruktoren verwendet werden.

Lesen Sie mehr über Pfeil Funktionen here

stattdessen eine normale Funktion verwenden:

let pesron = function(args) { 

    _.assignIn(this, args); // this is now bound the current function 

    this.emailIsValid =() => { 
    return this.email && this.email.length > 3 && this.email.indexOf('@') > -1; 
    }; 

}; 

Wenn new Aufruf müssen Sie einen Konstruktor haben. B. unter Verwendung von ES6:

class Person { 
    constructor(name, last, email){ 
    this.first = name; 
    this.last = last; 
    this.email = email; 
    } 

    emailIsValid() { 
    return this.email && this.email.length > 3 && this.email.indexOf('@') > -1; 
    }; 

}; 

const p = new Person("Jonathan","Dion", "[email protected]") 

console.log(p.first) // Jonathan 
console.log(p.emailIsValid(p.email)) // true 
Verwandte Themen