Метод цепочки в классе в JavaScript - PullRequest
0 голосов
/ 01 октября 2018

Я новичок в JavaScript.И я пытаюсь понять, как работают классы.У меня есть этот кусок кода:

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
console.log(value)

Значение возвращается, как это {result: 12} Но мне нужно, чтобы это было просто целое число 12.Есть ли способ исправить это, внеся изменения только в тело класса ?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

... путем внесения изменений только в тело класса ?

Нет.Вам также придется изменить что-то вне этого, потому что ваш метод add возвращает объект, а не число.Поэтому что-то должно сказать: «Я хочу вместо этого число, пожалуйста».

Если вы добавите метод valueOf в свой класс:

valueOf() {
    return this.result;
}

... тогда вещь вне классатело может быть просто +:

console.log(+value);

... но это все еще за пределами тела класса.

Живой пример:

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
  
  valueOf() {
    return this.result;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
console.log(+value);
0 голосов
/ 01 октября 2018

Это происходит потому, что вы возвращаете результат из вашего метода, поэтому значение будет объектом {результат: 12} . Если вы хотите увидеть выполнение и отладить его, добавьте debugger; влюбая строка, в которой вы нуждаетесь, вы можете понять, что получите;

    class TestObject {
      constructor(initialNumber) {
        this.result = initialNumber;
    }
      add(number) {
        this.result += number;
        debugger;
        return this;
      }
    }

    const value = new TestObject(7)
        .add(2)
        .add(3);
     debugger;
    console.log(value)

с кодом, который вы написали, если вы измените Console.log(value.result), вы получите желаемый результат.

0 голосов
/ 01 октября 2018

Поскольку ваша переменная value является экземпляром TestObject, вы можете использовать

console.log(value.result);

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
    
console.log(value.result);
...