@Pantene742

Как в JS переписать метод так чтоб он вызывался с еще одним аргументом по дефолту?

У меня есть класс, в моем случае это Subject у которого я хочу заоверрайдить pipe так чтоб он помимо всего что в него передадут в конец в самого себя передавал catchError. Есть пример по вроще на стаке https://stackblitz.com/edit/typescript-mvqpgt

Здесь у нас ExampleClass у которого есть метод showParams, и мне нужно чтоб этот метод работал по другому и хочу изменить его поведения уже после инициализации класса(создания объекта). Мне нужно чтоб помимо аргументов которые примет этот метод он вызывался с еще одним аргументом вконце.
  • Вопрос задан
  • 46 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
1. Ты уверен что хочешь замонкипатчить весь класс и всех потомков, а не конкретный его инстанс?
2. У тебя ряд никак не связанных с ts ошибок, эта строчка: this.showParams.apply(this, ...args); содержит две ошибки:
а) вызывая this.showParams внутри this.showParams ты поучаешь бесконечную рекурсию, надо сохранить старый this.showParams в отдельную переменную и вызывать через неё;
б.) Function.prototype.apply принимает вторым аргументом массив, а ты его тут зазря разбираешь.

Если на 1 вопрос ответ "нет", то как-то так должно быть:
class ExampleClass {
  showParams(...args) {
    console.log('I have to be calleb');
    console.log(...args);
  }
}

const exampleInstance = new ExampleClass();

exampleInstance.showParams('one', 'Two', 'Three', 456);

exampleInstance.showParams = (showParamsOld => function(...args){
  args.push('Default Argument');
  return showParamsOld.apply(this, args); 
})(exampleInstance.showParams);

exampleInstance.showParams('one', 'Two', 'Three', 456);
Если ответ "да", то поправь сам.

Только помни, что монки-патчинг это плохо, и к нему стоит прибегать только в крайних случаях.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы