ES6 Chaining Access Предыдущий метод - PullRequest
0 голосов
/ 01 декабря 2019

У меня проблема с цепочкой классов ES6. У меня есть класс, как в примере. Я хочу получить доступ к обратному вызову метода baz (). Я хочу использовать этот обратный вызов внутри класса WorkHard. Как я могу это сделать?

class WorkHard {

  constructor() {
    this.value_1 = []
    this.value_2 = []
  }
  
  foo(args) {
    this.value_1 = args;
    return this;
  }
  
  baz(cb) {
    this.value_1 = null;
    this.value_2 = null;
    return this;
  }
  
  zoo(args) {
    this.value_2 = args;
    return this;
  }
  
}

const WorkHard = new WorkHard();

WorkHard.foo('TestValue_1').baz(() => {
  console.log('This is baz() method content.');
}).zoo('TestValue_2')

1 Ответ

0 голосов
/ 01 декабря 2019

Вы не звоните cb нигде внутри своего класса. Кроме того, ваш экземпляр не может иметь то же имя, что и класс.

Просто выполните cb внутри baz.

class WorkHard {

  constructor() {
    this.value_1 = []
    this.value_2 = []
  }
  
  foo(args) {
    this.value_1 = args;
    console.log('foo called');
    return this;
  }
  
  baz(cb) {
    this.value_1 = null;
    this.value_2 = null;
    cb();
    return this;
  }
  
  zoo(args) {
    console.log('zoo called');
    this.value_2 = args;
    return this;
  }
  
}

const workHard = new WorkHard();

workHard.foo('TestValue_1').baz(() => {
  console.log('This is baz() method content.');
}).zoo('TestValue_2')

Если вы хотите, чтобы обратный вызов управлял потоком цепочек, имейте в виду, что обратный вызов сам по себе ничего не возвращает, поэтому вам также придется возвращать этот вызов функции вместо this

 // inside WorkHard
 baz(cb) {
   this.value_1 = null;
   this.value_2 = null;
   return cb(this);
 }


workHard.foo('TestValue_1').baz((instance) => {
  console.log('Workhard visible variables are', instance);
  return instance;
}).zoo('TestValue_2');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...