我试图创建可重复使用的链接功能,但我被卡住了。常见的方式c.plus(5).plus(2).execute()
工作正常,但我不知道如何使这个可重用如下。你知道怎么做吗?
function chain() {
this.i = 0;
this.plus = (x) => {
this.i = this.i + x;
return this;
};
this.execute = () => console.log(this.i);
}
const c = new chain();
const c1 = c.plus(5);
c1.plus(2).execute(); // 7
c1.execute();// 7 instead of 5

答案 0 :(得分:2)
当前功能的问题在于,当您致电plus()
时,您正在修改原始对象i
中的c
。
相反,每次调用chain
时都会返回一个新的plus(arg)
对象,并将arg
添加到当前值i
。
顺便说一下,javascript中习惯使用TitleCase
来命名构造函数。通常chain
为Chain
。 FYI。
function Chain() {
this.i = 0;
this.plus = (x) => {
let c = new Chain();
c.i = this.i + x;
return c;
};
this.execute = () => console.log(this.i);
}
const c = new Chain();
const c1 = c.plus(5);
c1.plus(2).execute(); // 7
c1.execute();// 7 instead of 5
c.plus(2).plus(10).execute(); // 12