我试图创建可重用的链接功能,但遇到问题。普通方法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

最佳答案

当前功能的问题在于,当您调用plus()时,您正在原始对象i中修改c

而是,每次调用chain时都返回一个新的plus(arg)对象,并将arg添加到i的当前值。

顺便说一句,在JavaScript中习惯上使用TitleCase来命名构造函数。通常chainChain。仅供参考。



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

关于javascript - 创建可重复使用的链函数javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49208338/

10-12 02:24