【问题标题】:Method Chaining in a Javascript Class [duplicate]Javascript类中的方法链[重复]
【发布时间】:2018-01-12 04:09:36
【问题描述】:

我正在尝试在我的子类 "setBall"

中实现方法链接
class Ball {
  constructor(name, size, power) {
    this.name = name;
    this.size = size;
    this.power = power;
  }   
}

let Ball1 = new Ball('Bomb',5,2);
console.log(Ball1);

class setBall extends Ball{
  constructor(name, size, power) {
    super(name, size, power);
  }

  setBall.setName(name) {
    this.name = name;
  }

  setBall.setSize(size) {
    this.size = size;
  }

  setBall.setPower(power) {
    this.power = power;
  }

  get getthrowSpeed() {
    return this.size + this.power;
  }
}

let Ball2 = new setBall('Big',3,7);
console.log(Ball2);

我在控制台中测试时收到的错误是:Uncaught SyntaxError: Unexpected token .

如果我在它们之间添加 .prototype 也会发生同样的错误。 这些方法在没有 'setBall.' 的情况下工作,而不是输入:

*Ball2.setName('blue');

Ball2.setSize(2);

Ball2.setPower(3);*

我想输入: Ball2.setName('blue').setSize(2).setPower(3);

我的问题是,如何在类中链接这些方法?

【问题讨论】:

  • setName(name) { this.name = name; } 就够了,不需要` setBall.setName(name) { this.name = name; }`
  • 这不是 Javascript 它是 Typescript,所以你没有原型。您是否尝试在每个方法结束时返回它?

标签: javascript method-chaining


【解决方案1】:

如果您要在每个函数的末尾返回球(在您的示例 Ball2 的情况下)对象,它将起作用。您可以通过在每个函数末尾调用“return this”来链接方法来做到这一点。

您可以查看 wikipedia java 示例以了解他们如何实现它: https://en.wikipedia.org/wiki/Method_chaining

【讨论】:

  • 谢谢,在每个方法的末尾加上“return this”,去掉“setBall”。一开始,有我的方法链。
  • @MJohnston 请问这是否是一种有效的设计模式?我喜欢拥有具有可链接方法的类并且只是想这样做,但是如果我有一个存储大量数据的对象,这样做不会导致不必要的内存使用吗?因为每次一个方法在复制时都会返回自己?还是该对象只是作为引用返回,因此不会导致额外的内存使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2016-07-11
  • 2020-08-14
  • 2020-05-05
  • 2020-02-09
相关资源
最近更新 更多