2013-10-12 4 views
1
Function.prototype.times = function(val){ 
     var that = this; 
     return function (arg) { 
      if(val == 0){ 
       return that.call(this,arg); 
      } 
      else{ 
       var newArg = that.call(this,arg); 
       var newVal = val - 1; 
       return that.call(that.times,newVal,newArg); 
      } 
     } 
    } 
    var add_two = function (num) { return num + 2; }; 
    var add_six = add_two.times(3); 
    alert(add_six(2)); 

Может кто-нибудь помочь мне объяснить, почему этот код не работает? Спасибо!Функция прототипа композиции Javascript

+0

add_six не функция –

ответ

0

пара проблем с этим, вот Исправленная версия:

Function.prototype.times = function(val){ 
    var that = this; 
    return function (arg) { 
     if(val == 1) { 
      return that.call(this,arg); 
     } else{ 
      var newArg = that.call(this,arg); 
      var newVal = val - 1; 
      return that.times.call(that,newVal)(newArg); 
     } 
    } 
} 
var add_two = function (num) { return num + 2; }; 
var add_six = add_two.times(3); 
alert(add_six(2)); // 8 
+0

почему бы не просто вернуть VAL * newArg-newVal * Arg; ? –

0

Пожалуйста, проверьте это. Link

В принципе add_six не является функцией, а ссылкой на функцию. Проверьте код ниже

alert(typeof add_six(2)); 
Смежные вопросы