Метод цепочки в JS - PullRequest
       2

Метод цепочки в JS

0 голосов
/ 04 ноября 2019

скажем так:

var method = function(number) {
  this.number = number;

  this.add = function(param) {
    this.number = this.number + param;
    return this
  }
  this.multiply = function(param) {
    this.number = this.number * param;
    return this.number
  }

}

Если я сделаю:

var newMeth = new method(2);
var result = newMeth.add(2).multiply(2);
console.log(result) // Will return 8

Но моя главная проблема в том, хочу ли я сделать:

var newMeth = new method(2);
var result = newMeth.add(2);

Я хотел бы знать, как было бы возможно, чтобы в этом случае результат возвращал мне «4» вместо method {number: 4, add: ƒ, multiply: ƒ}

Но все равно возвращал бы мне 8, если я делаю

var result = newMeth.add(2).multiply(2);

Любая помощь будет признательна. Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

Вы можете определить метод val() в вашей цепочке, который будет возвращать число, и использовать его следующим образом:

var result = newMeth.add(2).multiply(2).val();
// OR
var result = newMeth.add(2).val();
// OR
var result = newMeth.val();
1 голос
/ 04 ноября 2019

Вы можете определить valueOf метод для вашего объекта . Вы можете явно вызвать его, чтобы получить число, но оно также будет вызываться неявно при преобразовании объекта в примитив:

var method = function(number) {
  this.number = number;

  this.add = function(param) {
    this.number = this.number + param;
    return this
  }
  
  this.multiply = function(param) {
    this.number = this.number * param;
    return this
  }
  
  this.valueOf = function() {
    return this.number;
  }
}

var num = new method(2)
  .add(3)
  .multiply(7);
console.log(num.valueOf());
console.log(num + 3);
console.log(num + " bottles on the wall");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...