javascript类中的方法链接

时间:2018-10-01 18:05:14

标签: javascript class this return-value chaining

我是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。有什么方法可以通过仅在类主体中进行更改b来解决此问题?

3 个答案:

答案 0 :(得分:0)

由于您的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);

答案 1 :(得分:0)

  

...仅通过在类正文中进行更改

不。您还必须更改其外部的内容,因为您的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);

答案 2 :(得分:0)

之所以发生这种情况,是因为您从方法中返回了结果,因此该值将是一个对象 {result:12} 。如果要查看执行并进行调试,请添加{{1 }}到您需要的任何行,您都可以了解得到的内容;

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) ,将获得所需的结果。