2017-04-16 3 views
-4
class DataBase { 
    constructor(id){ 
     this.id='123'; 
} 

get_id() { return "testing";} 

} 

class User {constructor(database) { 
this.__database=database; 
console.log(this.__database.id); 
this.initfunc(); 
} 
    initfunc(){this[`get_id`]=new Function(`return this.__databse.get_id()`); 
} 
} 
var database=new DataBase(); 
var user =new User(database); 
console.log(user.get_id()); 

Jeder weiß, wie die neue Funktion zu verwenden, wenn das Ergebnis korrekt ist, wird die Zeichenfolge Test zurückkehren, wissen jemand wie zu tun, bitte helfen Sie, dankJavascript, wie neue Funktion verwenden

die erwarten Ergebnis ist console.log (user.get_id()) wird "testen", aber jetzt Fehler zurück (undefined: 2 return this .__ databse.get_id() ^

Typeerror: kann nicht lesen Eigenschaft 'GET_ID' undefinierter)

+2

Was genau fragen Sie? Auf welches Problem stößt du? Was geschieht? Was erwartest du zu passieren? Wie unterscheiden sie sich? – pvg

+0

Danke für die Antwort, ich habe die Frage aktualisiert – user3035661

+1

Nun, abgesehen von einigen offensichtlichen Probleme, haben Sie "__database" falsch geschrieben. Der Fehler ist ein totes Give-Away, das 'get_id()' kann nicht auf etwas undefiniert aufgerufen werden. – chazsolo

Antwort

-1

Sie haben eine Tippfehler in Ihrem Code __database sollte Datenbank lesen

+0

Danke für die Antwort. – user3035661

+0

Ihre Implementierung ist nicht der richtige Weg, dies zu tun. Laut Kommentaren. Meine Antwort ist lediglich eine Korrektur Ihres Codes. Nur so ist das für jede zukünftige Referenz klar. – MartinWebb

0

Es ist ziemlich mysteriös, was Sie zu erreichen versuchen. Im Konstruktor rufen Sie eine Methode auf, die scheinbar versucht, eine andere Methode zu erstellen. Warum nicht einfach die Methode wie gewohnt definieren?

class DataBase { 
 
     constructor(id){ 
 
     this.id='123'; 
 
     } 
 
     get_id() { return "testing"; } 
 
    } 
 

 
    class User { 
 
     constructor(database) { 
 
     this.__database=database; 
 
     console.log(this.__database.id); 
 
     } 
 
     get_id() { return this.__database.get_id(); } 
 
    } 
 

 
    var database=new DataBase(); 
 
    var user =new User(database); 
 
    console.log(user.get_id());

Als allgemeine Faustregel könnte man in JS seit Jahren programmiert und einen legitimen Grund nie new Function zu bedienen.

Wenn aus irgendeinem seltsamen Grund wirklich Sie wollten Ihre aktuelle Struktur erhalten, eines Verfahrens ein anderes Verfahren einrichten, dann geben Sie einfach die Funktion als

initfunc() { 
    const self = this; 
    this[`get_id`] = function() { 
    return self.__database.get_id(); 
    }; 
} 

Oder Sie könnten alle self Unternehmen überspringen, indem ein mit Pfeilfunktion:

initfunc() { this[`get_id`] =() => this.__database.get_id(); } 
Verwandte Themen