2016-09-06 15 views
0

関数の中に2つのオブジェクトがあります。そして最初は完璧ですが、 "helper.calc.addは関数ではありません"より2番目のリターンエラーです。どうしましたか?第例えばJS。オブジェクト関数return関数の戻り関数

var calc = (function() { 
    var add; 
    var remove; 

    // some functions add and remove... 

    return { 
    add: add, 
    remove: remove 
    } 
})(); 

calc.add(1); 

そして第二:コンソールで

var helper = (function() { 
    return { 
     calc: function() { 
      var add; 
      var remove; 

      // some functions add and remove... 

      return { 
       add: add, 
       remove: remove 
      } 
     } 
    } 
})(); 

helper.calc.add(1); 

1 
Uncaught TypeError: helper.calc.add is not a function 

フィドル:https://jsfiddle.net/pk4tsnnt/

+1

に相当します.add(1); ' – Rayon

+1

おそらく、関数' calc'を直ちに呼び出すことを意図していました。 – RemcoGerlich

答えて

0

helper.calcがであります、object

functionを呼び出して、関数によって返されたオブジェクトのプロパティにアクセスします。

var handler = 1; 
 
var calc = (function() { 
 
    var add; 
 
    var remove; 
 
    if (handler > 0) { 
 
    add = function(a) { 
 
     console.log(a++); 
 
    }; 
 
    remove = function(a) { 
 
     console.log(a--); 
 
    }; 
 
    } else { 
 
    add = function(a) { 
 
     console.log(a += 2); 
 
    }; 
 
    remove = function(a) { 
 
     console.log(a -= 2); 
 
    }; 
 
    } 
 
    return { 
 
    add: add, 
 
    remove: remove 
 
    } 
 
})(); 
 

 
var helper = (function() { 
 
    return { 
 
    calc: function() { 
 
     var add; 
 
     var remove; 
 
     if (handler > 0) { 
 
     add = function(a) { 
 
      a++; 
 
     }; 
 
     remove = function(a) { 
 
      a--; 
 
     }; 
 
     } else { 
 
     add = function(a) { 
 
      a += 2; 
 
     }; 
 
     remove = function(a) { 
 
      a -= 2; 
 
     }; 
 
     } 
 
     return { 
 
     add: add, 
 
     remove: remove 
 
     } 
 
    } 
 
    } 
 
})(); 
 

 
calc.add(1); 
 
helper.calc().add(1);

0

私は、最終的な結果を表示するmodifiedあなたにconsole.logを持っています。 はcalcobjectと間違って解釈していましたが、それはfunctionです。 第二には、 あなたはそれがES6に構造化代入とは逆であるオブジェクトに追加を再構築し、削除する関数

からオブジェクトを返すために使用することができますES6アプローチです。

return { add, remove } 

) `helper.calc`は` function`で、 `object` ...(` helper.calcを試してみません

return { add : add, remove: remove } 

var handler = 1; 
 

 
var calc = (function() { 
 
\t var add; 
 
    var remove; 
 
     
 
\t if (handler > 0) { 
 
     add = function (a) { 
 
     console.log('calc add ' , ++a); 
 
    } ; 
 
    remove = function (a) { 
 
     console.log(a--); 
 
    }; 
 
    } else { 
 
    add = function (a) { 
 
     console.log(a += 2); 
 
    }; 
 
    remove = function (a) { 
 
     console.log(a -= 2); 
 
    }; 
 
    } 
 

 
    return { add, remove } 
 

 
})(); 
 

 
var helper = (function() { 
 
\t return { 
 
    \t calc: function() { 
 
    \t var add; 
 
     var remove; 
 
     
 
     if (handler > 0) { 
 
     \t add = function (a) { 
 
     \t console.log('Helper calc add ', ++a); 
 
     }; 
 
     remove = function (a) { 
 
     \t a--; 
 
     }; 
 
     } else { 
 
     \t add = function (a) { 
 
     \t a += 2; 
 
     }; 
 
     remove = function (a) { 
 
     \t a -= 2; 
 
     }; 
 
     } 
 
     
 
     return { add , remove } 
 
     
 
    } 
 
    } 
 
})(); 
 

 
calc.add(1) 
 
helper.calc().add(1)