【问题标题】:JavaScript Class Custom Type Conversion [duplicate]JavaScript 类自定义类型转换 [重复]
【发布时间】:2021-07-20 08:56:00
【问题描述】:

我知道这可能很难做到,但是有没有办法覆盖 JavaScript 的自动类型转换?说我有

class Foo {
  constructor() {
    this.foo = "foo"
  }
}

我想做这样的事情:

let foo1 = new Foo();
let foo2 = new Foo();

let diff = foo2 - foo3;

就像在 JavaScript 中使用 Date 进行数学运算:

let d1 = new Date();
setTimeout(() => {
  let d2 = new Date();
  d2 - d1; //500
}, 0);

如果有帮助,我正在尝试使用矩阵。如果这太模糊,请告诉我,我会尽力提供您需要的任何信息。

【问题讨论】:

标签: javascript class math matrix


【解决方案1】:

Javascript 没有任何类型的“类型转换”;因为它没有“类型”开始。虽然 javascript 在以后的版本中确实知道 class 关键字,但这只是来自 Java 等基于类的系统的程序员的语法糖。在底层,Javascript 不知道类(或类型),它只知道对象和原型。

这意味着:在对象上使用诸如- 之类的数字运算符时,不会进行类型转换。但是,由于- 只能处理数值,因此传入它的对象需要转换为数值。这是通过在内部调用valueOf() 来完成的——通常,此方法的实现由Object.prototype 提供。 (Object.prototype.valueOf on MDN)

要更改将值转换为数值的方式,您可以自行实现valueOf。如果这样做,您的对象实现将被使用而不是 Object 定义的实现,因为您的实现将在原型链上“更高”。 (在“传统”、基于类的系统中,这等于“覆盖”)。

class Foo {
    constructor() {
       this.foo = "foo"
    }
    valueOf() {
        // do math to convert Matrix into primitive
        return convertedValue;
    }

这个例子应该清楚地表明没有办法使用- 运算符实际进行矩阵减法 - 它只适用于数值。因此,如果您不打算减去矩阵的特征值,而是实际上从等维不同的矩阵中减去一个矩阵,那么这将行不通。

相反,您可以提供一个subtract() 方法,该方法将采用第二个矩阵并返回结果。

【讨论】:

  • 这非常有帮助,谢谢。
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多