2016-04-11 14 views
3

私は、javascriptプロトタイプについてもう少し学びたいと思っています。私はいくつかのNodeJSモジュールが以下のように呼び出されていることを知りました:something.funcA().funcB().funcC();と私はそれを再現しようとしています。どのようにすればいいのですか?関数の後にプロトタイプ関数を実行する

これは私がこれまでにしようとしてから得たものである:

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; 
}; 

私は関数を呼び出すとき:私はadd()sub()を実行したときに

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

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

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

add()作品ではなく、実行:

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

これはプロトタイプとは関係ありません。値を返すだけの通常の関数です。 – SLaks

答えて

3

add(5).sub(1) 0123オブジェクトのはadd()によって返されます。

add()は何も返さないため、動作しません。

おそらくthisを返すことにします。

+0

'TypeError:calc.calculate(...)。add(...)。subは両方の関数に' return this; 'を追加した後の関数'ではありません。 –

+2

'return this;'を使うと、私にとってはうまくいきました。質問のコードを現在のものに更新できますか? – saadq

+0

コードを更新しました。 –

関連する問題