Как написать класс с оператором функция() в javascript?
Я хочу подсунуть foreach-у функтор (то есть функцию, у которой есть память, это нужно для того, чтобы она суммировала все значения массива). Я пробовал делать через class и у меня не получилось (или выходило nan или вместо правильной суммы выходило 0). Но у меня получилось сделать вот так - я описал простую функцию, но так как функции они тоже объекты, я потом добавил в объект-функцию поле summ и также метод clear, чтоб перед использованием стереть на ноль summ (если вдруг раньше эта функция была кем то использована, то там останется предыдущая сумма). Вопрос же у меня вот какой - как это переписать с использованием class?
function functor(val) {
functor.summ = functor.summ + val;
}
functor.summ = 0;
functor.clear = function () { functor.summ = 0;};
let arr1 = [1, 2, 3];
functor.clear();
arr1.forEach( functor );
console.log(functor.summ);
Ответы (1 шт):
Автор решения: Timur123
→ Ссылка
Мне помогла функция bind.
class CoolFunctor {
summ = 0;
constructor(){}
add(val) {this.summ = this.summ + val;}
}
let arr1 = [1, 2, 3];
let functor1 = new CoolFunctor();
// это не работает, так как this внутри add привязывается не к CoolFunctor,а к arr1.
// arr1.forEach( functor1.add );
// здесь мы привязываем this внутри метода add конкретно к экземпляру functor1
//поэтому это работает как надо
let binded_method_to_concrete_instance = functor1.add.bind(functor1);
arr1.forEach( binded_method_to_concrete_instance );
console.log(functor1.summ);