javascript 如何自动返回最后一个链接的方法后面的值,如果没有构建方法的话?

ufj5ltwl  于 2023-02-11  发布在  Java
关注(0)|答案(2)|浏览(107)

我希望我的方法返回值,而不是类示例,如果那是最后一个链接的方法。
例如,通常我们有这样的:

class MyClass {
   constructor(){
    this.value = 0;
   }

   plus(amount){
     this.value += amount;
     return this;
   }

   minus(amount){
     this.value -= amount;
     return this;
   }

   getNumber(){
     return this.value;
   }
}

但我想要这样的东西:

class MyClass {
   constructor(){
    this.value = 0;
   }

   plus(amount){
     this.value += amount;
     if(isLastMethod){    // How do I know if that's the last method ?
       return this.value;
     } else{
       return this;
     }

   }

   minus(amount){
     this.value -= amount;
     if(isLastMethod){
       return this.value;
     } else{
       return this;
     }
   }
}

如果我能对返回值调用更多的方法,那就更好了,但至少这个基于方法是否是最后一个的条件返回会很棒。

xxls0lw8

xxls0lw81#

因为我们不知道它是否是最后一个方法,但是我们可以添加参数returnValue来从方法中获取值,如果你想立即获取值,可以将其设置为true:

class MyClass {
  constructor(){
   this.value = 0;
  }

  plus(amount, returnValue){
    this.value += amount;
    if (returnValue)
      return this.value

    return this;
  }

  minus(amount, returnValue){
    this.value -= amount;
    if (returnValue)
      return this.value

    return this;
  }

  getNumber(){
    return this.value;
  }
}

下面是一个例子:

class MyClass {
  constructor(){
   this.value = 0;
  }

  plus(amount, returnValue){
    this.value += amount;
    if (returnValue)
      return this.value

    return this;
  }

  minus(amount, returnValue){
    this.value -= amount;
    if (returnValue)
      return this.value

    return this;
  }

  getNumber(){
    return this.value;
  }
}

let myClass = new MyClass();
let value = myClass.plus(8).minus(1, true)
console.log(value)
l3zydbqr

l3zydbqr2#

您可以通过以下方式创建此类构建器

function builderMyClass(builderFunc) {
  const myClass = new MyClass();
  const builder = {
    plus: (value) => {
      myClass.plus(value);
      return builder;
    },
    minus: (value) => {
      myClass.minus(value);
      return builder;
    },
  };
  builderFunc(builder);
  return myClass.getNumber();
}

其使用方法

const result = builderMyClass((builder) => 
  builder
    .plus(5)
    .minus(4)
    .plus(1)
);

相关问题