Вопросы относительно объектов / функций вызова
Так что я решил эту проблему для класса, который я беру через проект 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;