0

我正在尝试在 Typescript / Javascript 中实现 Vector 类,这是加法和减法函数的片段:

add(val: Vec2 | number) {
  if (typeof val === "number") {
    return new Vec2(this.x + val, this.y + val);
  } else {
    return new Vec2(this.x + val.x, this.y + val.y);
  }
}

sub(val: Vec2 | number) {
  if (typeof val === "number") {
    return new Vec2(this.x - val, this.y - val);
  } else {
    return new Vec2(this.x - val.x, this.y - val.y);
  }
}

这似乎有点恶心。我正在四处寻找替代方案,但我不确定是否有。理想情况下,我会做vec1 + vec2or vec1 + 5,但看起来 Javascript 中不存在运算符重载。

然后,我在看 TypeScript,但看起来函数重载只有在它们具有不同的参数和不同的返回类型时才有效。因为这两种选择的返回类型都是 a Vec2,所以看起来我不能为此使用 TypeScript 函数重载。

接下来,我研究了每个函数有两个变体。也就是说,有一个addScalar函数和一个addVector函数,其中前者将一个标量添加到当前向量,而后者将一个向量添加到当前向量。不幸的是,这对客户端来说有点粗俗,因为您必须根据您的操作对象巧妙地更改您正在调用的函数。

使用typeof似乎也很糟糕,因为这些是向量操作,通常我在编程中发现查询某物的类型与简单的加法相比是一个相当慢的操作。尽管如此,它似乎比我的基准测试typeof要快得多。isNaN

我可以在这里做得更好吗,或者我提供的代码片段是否与它将获得的一样好?

4

0 回答 0