2016-11-19 3 views
0

Ich versuche, mich zu trainieren Funktion zu schreiben Verkettungs aber erhielt Fehler vonMethode Verkettungs fehlgeschlagen in Javascript

Cannot read property 'minus' of undefined(…)

Was mit meinem Code falsch?

var math = function(){ 
 
    var result = 0; 
 
    
 
    var add = function(param){ 
 
    result += param; 
 
    }; 
 
    
 
    var minus = function(param){ 
 
    result -= param; 
 
    }; 
 
    
 
    var print = function(){ 
 
     console.log(result) 
 
    }; 
 
    
 
    return {add:add, minus: minus, print:print}; 
 
} 
 

 
var calculator = math(); 
 
var result = calculator.add(5).minus(1).print(); 
 
console.log(result)

+2

Ihre Funktionen geben nichts explizit. Wenn Sie 'calculator.add (5)' aufrufen, erhalten Sie 'undefined' zurück, das natürlich kein' .minus' hat. – vlaz

Antwort

3

Sie müssen das Objekt (this) in diesem Fall zurück, zu "Kette", wie Sie erwarten

Sie print() auch nichts zurückliefert so result ist immer nicht definiert.

var math = function(){ 
 
    var result = 0; 
 
    
 
    var add = function(param){ 
 
    result += param; 
 
    return this; 
 
    }; 
 
    
 
    var minus = function(param){ 
 
    result -= param; 
 
    return this; 
 
    }; 
 
    
 
    var print = function(){ 
 
     console.log('result: ' + result); 
 
     // print doesnt return anything, it needs to if you want to assign anything by calling it 
 
     return result; 
 
    }; 
 
    
 
    return {add:add, minus: minus, print:print}; 
 
} 
 

 
var calculator = math(); 
 
var result = calculator.add(5).minus(1).print(); 
 
console.log(result)

+0

aw was für ein unvorsichtiger Fehler! Danke! –

+0

Wenn es es löst, markieren Sie die Antwort als richtig :) – Stuart

0

können Sie speichern auch eine Referenz auf das Objekt zurückgegeben.

var math = function() { 
 
    var result = 0; 
 

 
    var add = function(param) { 
 
    result += param; 
 
    
 
    return math; 
 
    }; 
 

 
    var minus = function(param) { 
 
    result -= param; 
 
    
 
    return math; 
 
    }; 
 

 
    var print = function() { 
 
    console.log(result) 
 
    }; 
 
    
 
    var math = { 
 
    add: add, 
 
    minus: minus, 
 
    print: print 
 
    }; 
 
    
 
    return math; 
 
} 
 

 
var calculator = math(); 
 
calculator.add(5).minus(1).print();

+2

warum nicht einfach 'this' verwenden? –

+0

* Achselzucken * Ich bin mehr daran gewöhnt, 'dies' zu verwenden, wenn ein neues beteiligt ist. Dieses Snipplet hat nicht neu verwendet. – Taplar