Вопросы относительно объектов / функций вызова

Так что я решил эту проблему для класса, который я беру через проект euler, теперь мне нужно сделать это, используя объекты, и я искал в Google, но надеялся получить несколько советов о том, где я могу пойти не так. Попытка сохранить переменные для вызова для последующего использования, похоже, что fiboSeq никогда не был пригоден для использования. Я просто вызываю функцию неправильно? Любой совет или пункт в правильном направлении, чтобы учиться было бы здорово.

function solution(){
  return {
    fibo: function(limit, prev, curr){
      var fiboSeq = [];
      for (curr = curr; curr < limit; curr = prev + curr){
        prev = curr - prev;
        fiboSeq.push(curr);
      }
      return fiboSeq;
    },

    filterEvens: function(index){
      var evens = [];
      fiboSeq.forEach(function(value, index){
        if (value % 2 === 0){
          evens.push(value);
        }
      });
      return evens;
    },

    sum: function(evens){
      sumEvens = 0;
      evens.forEach(function(value, index){
        sumEvens += sumEvens
      });
      return sumEvens;
    }
  }
}

var seqF = solution().fibo(100, 1, 2);
var evenF =  solution().filterEvens(seqF);
var victoryD = solution().sum(evenF);
console.log(victoryD);

Спасибо!

2 ответа

Решение

fiboSeq находится в местном соцп fibo(), Чтобы получить доступ к нему из других функций, вы должны либо передать его в качестве аргумента, либо определить его вне возвращаемого объекта.

function solution(){
  var fiboSeq = [];
  return {
    fibo: function(limit, prev, curr){
      for (curr = curr; curr < limit; curr = prev + curr){
        prev = curr - prev;
        fiboSeq.push(curr);
      }
      return fiboSeq;
    },
    // ...
  }  

Просмотрите следующий код:

function solution(){
  this.fiboSeq = this.evens = [];
  this.fibo = function(limit, prev, curr){
    for(var c=curr,l=limit,p=prev; c<l; c=p+c){
      p = c-p; this.fiboSeq.push(c);
    }
    return this;
  }
  this.filterEvens = function(){
    var fs = this.fiboSeq;
    for(var i=0,l=fs.length; i<l; i++){
      if(fs[i] % 2 === 0){
        this.evens.push(fs[i]);
      }
    }
    return this.evens;
  }
}
var sol = new solution;
var evenF = sol.fibo(100, 1, 2).filterEvens(); 
var eFl = evenF.length;
Другие вопросы по тегам