2016-07-13 11 views
1

Einen Rechner erstellen, der neue Methoden akzeptiert. Aber wenn ich eine neue Methode hinzufüge, sieht es das Objekt "this" nicht. Warum Console.log gibt "undefined" zurück?Neue Methode sieht "this" nicht (JavaScript)

function Calculator() { 
 
    this.numbers = function() { 
 
     this.numberOne = 2; 
 
     this.numberTwo = 5; 
 
    }, 
 
    this.addMethod = function(op, func) { 
 
     this[op] = func(this.numberOne, this.numberTwo); 
 

 
    // WHY LOG RETURNS "undefined"? 
 
     console.log(this.numberOne); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 

 
calc.addMethod("/", (a, b) => (a/b)); 
 
document.write(calc["/"]);

+1

Sie haben einen Tippfehler in Zeile 5: das Komma ein Semikolon sein sollte. – GMaiolo

+4

'this.one' ist nie gesetzt, also ja, es ist' undefined'. –

+0

+ goliadkin Ich denke, es funktioniert so oder so ... – ahitt6345

Antwort

4

Sie nicht definiert this.numberOne und this.numberTwo, bevor Sie es um die Funktion aufzurufen versucht. Darüber hinaus drucken Sie this.one, die nie in Ihrem Code definiert ist.

Wenn Sie versucht, die folgenden Ausschnitt:

function Calculator() { 
 
    this.numbers = function() { 
 
    this.numberOne = 2; 
 
    this.numberTwo = 5; 
 
    }, 
 
    this.addMethod = function(op, func) { 
 
    this[op] = func(this.numberOne, this.numberTwo); 
 

 
    // WHY LOG RETURNS "undefined"? 
 
    console.log(this.numberOne); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 
calc.numbers(); 
 
calc.addMethod("/", (a, b) => (a/b)); // 2/5 
 
document.write(calc["/"]);

Dann wird der Code wie erwartet, weil calc.numberOne und calc.numberTwo

+0

this.one war ein Tippfehler. Mit calc.numbers(); alles funktioniert! Vielen Dank! –

+0

Ihre Begrüßung! Bitte markieren Sie diese Antwort! – ahitt6345

0

Ihre Zahlen definiert werden, wurden nicht initialisiert zu werden.

Auch Sie verwendet this.one was ist das? Meinten Sie numberOne?

Überprüfen Sie den Arbeitscode unten aus:

function Calculator() { 
 
    this.numberOne = 2; 
 
    this.numberTwo = 5; 
 
    this.addMethod = function(op, func) { 
 
    this[op] = func(this.numberOne, this.numberTwo); 
 
    // WHY LOG RETURNS "undefined"? 
 
    console.log(this.numberOne, this.numberTwo); 
 
    } 
 
} 
 

 
let calc = new Calculator(); 
 
calc.addMethod("/", (a, b) => (a/b)); 
 
document.write(calc["/"]);