2016-04-11 7 views
3

Ich versuche, ein bisschen mehr über Javascript-Prototypen zu lernen (ich denke, das ist, wie das heißt). Ich sah einige NodeJS-Module mit Funktionen, die wie folgt aufgerufen wurden: something.funcA().funcB().funcC(); und ich versuche es zu reproduzieren. Wie kann ich es tun und wie heißt es?Running Prototyp Funktionen nach der Funktion

Dies ist, was ich von dem Versuch, so weit gekommen:

var total = { t: 0 }; 

module.exports.calculate = function() { 
    var calc = {}; 

    calc.result = function result() { 
     return total.t; 
    } 

    calc.add = function add(num) { 
     total.t += num; 
     return this; 
    } 

    calc.sub = function sub(num) { 
     total.t -= num; 
     return this; 
    } 

    return calc; 
}; 

Wenn ich die Funktion aufrufen:

calc = require('../helpers/calculate'); 

// 5 - 1 + 3 = 7 
calc.calculate().add(5).sub(1); 
calc.calculate().add(3); 

console.log(calc.calculate().result()); 

add() Arbeiten läuft, aber nicht, wenn ich laufen sub() nach add():

TypeError: Cannot read property 'sub' of undefined 
+2

Das hat nichts mit Prototypen zu tun; Es ist nur eine normale Funktion, die einen Wert zurückgibt. – SLaks

Antwort

3

add(5).sub(1) Anrufe sub() für das Objekt zurückgegeben von add().

Da add() nichts zurückgibt, wird das nicht funktionieren.

Sie möchten wahrscheinlich this zurückgeben.

+0

'TypeError: calc.calculate (...). Add (...). Sub ist keine Funktion' nach dem Hinzufügen von 'return this;' zu beiden Funktionen. –

+2

Mit 'return this;' hat es für mich funktioniert. Können Sie den Code in Ihrer Frage auf das aktualisieren, was Sie gerade haben? – saadq

+0

Aktualisierte den Code. –

Verwandte Themen