【问题标题】:Method chaining in class in javascriptjavascript中类中的方法链接
【发布时间】:2018-10-01 18:05:13
【问题描述】:

我是 JavaScript 新手。我正试图弄清楚课程是如何运作的。 我有这段代码:

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
console.log(value)

值返回像这样{result: 12} 但我需要它只是整数12。有没有办法通过仅在类主体中进行更改来解决此问题?

【问题讨论】:

  • 只是为了检查,这是一个家庭作业问题吗?如果是这样很好,但如果是这样的话,应该提前。
  • 没有办法动态地做到这一点。显然,如果代码始终相同并且您必须绝对找到一种方法来执行此操作,那么您可以跟踪add 被调用的次数并仅在第二次调用时返回值,但这只是一个可行的解决方案在这种情况下,除非这是一个挑战,否则没有意义。
  • 感谢您的回答。是的,这是一个家庭作业问题。我所能做的就是在类中实现方法和构造函数。我还有其他二进制操作的方法。我不能碰课外的东西。

标签: javascript class this return-value chaining


【解决方案1】:

因为你的value 变量是TestObject 的一个实例,所以你可以使用

console.log(value.result);

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
    
console.log(value.result);

【讨论】:

  • ...不是“仅在类主体中”的更改。
【解决方案2】:

...通过仅在类主体中进行更改

没有。您还必须更改它之外的某些内容,因为您的 add 方法返回一个对象,而不是一个数字。所以必须说“我想要一个数字。”

如果你在你的类中添加一个valueOf 方法:

valueOf() {
    return this.result;
}

...那么类体之外的东西可能只是+:

console.log(+value);

...但这仍然在类主体之外。

活生生的例子:

class TestObject {
  constructor(initialNumber) {
    this.result = initialNumber;
}
  add(number) {
    this.result += number;
    return this;
  }
  
  valueOf() {
    return this.result;
  }
}

const value = new TestObject(7)
    .add(2)
    .add(3);
console.log(+value);

【讨论】:

    【解决方案3】:

    发生这种情况是因为您从方法返回结果,因此该值将是一个对象{result:12},如果您想查看执行并调试它,请添加debugger;到您需要的任何线路,您都可以了解正在得到什么;

        class TestObject {
          constructor(initialNumber) {
            this.result = initialNumber;
        }
          add(number) {
            this.result += number;
            debugger;
            return this;
          }
        }
    
        const value = new TestObject(7)
            .add(2)
            .add(3);
         debugger;
        console.log(value)
    

    使用您编写的代码,如果您更改Console.log(value.result),您将获得所需的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 2020-05-05
      • 2011-03-28
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多