如果是最后一个链接方法,我希望我的方法返回值,而不是类实例。
例如,通常我们有这样的:
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;
}
}
}
如果我可以对返回的值调用更多的方法,那会更好,但至少这种基于方法是否最后一个的条件返回会很棒。
因为我们不知道它是否是最后一个方法,但我们可以添加参数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)
您可以通过这种方式创建这样的生成器
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)
);