2016-11-19 6 views
0

に失敗しましたが、私のコードで間違って何メソッドチェーンは、私は機能をチェーン書くために自分自身を訓練しようとしているJavaScriptの

Cannot read property 'minus' of undefined(…)

のエラーを得ましたか?

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

あなたの機能は、明示的に何も返しません。したがって、 'calculator.add(5)'を呼び出すと 'もちろん、' .minus'を持たない 'undefined'が返されます。 – vlaz

答えて

3

あなたは

を期待しているようにあなたはあなたprint()もそう何も返さないresultは常に「チェーン」に、この場合にはオブジェクト(this)を返す必要があります未定義。

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何か不注意な間違い!ありがとうございました! –

+0

解決したら、答えを正しいとマークしてください:) – Stuart

0

また、返されたオブジェクトへの参照を格納することができます。

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

なぜ「this」を使用しないのですか? –

+0

* shrug *私は、新しい関係があるときに 'this'を使うのに慣れています。このスニペットは新しいものを使用しませんでした。 – Taplar

関連する問題