【问题标题】:Class that returns a value instead of self返回值而不是自身的类
【发布时间】:2019-08-26 17:31:49
【问题描述】:

有没有办法在typescript 中创建一个类,当使用它的实例时,它返回一个值或属性而不是它本身?例如。 console.log(myClassInstance) => 1

当我第一次尝试这样做时,我想也许这样的事情会起作用:

class MyClass<T> {

    constructor(private a: T) {}

    get this() { return this.a }
}

但不幸的是它没有。这有效:myClassInstance.this =&gt; myClassInstance.a,但这违背了整个目的。有没有办法做到这一点?

编辑

有人问我为什么要这个,只是为了更好的可读性。例如,如果我想要一个 Matrix 类,我可以只使用一个嵌套数组,但是向它添加自定义函数和属性只是一件麻烦事。另外,new Matrix&lt;number&gt;() 看起来比 new Array&lt;Array&lt;number&gt;&gt; 好很多

我知道我可以利用接口和函数使其看起来像创建类的实例,但返回另一个值:new Matrix&lt;number&gt;() =&gt; new Array&lt;Array&lt;number&gt;&gt;(),但我希望有更好的使用类的方法。

【问题讨论】:

  • 与仅使用数字相比有什么优势?
  • @ScottSauyet 多么愚蠢的问题,它增加了歧义!而且越模糊越好!如果它在模棱两可的基础上不起作用,那么任务就完成了——该项目现在处于需要不断维护的状态,并且创造了无尽的金钱和时间漏洞,实现了 CERN 的物理学家迄今为止没有做过的事情——奇点。
  • @Mjh:哦,当然。我应该意识到的。我真傻,真的。
  • 我认为值得尝试解释为什么你会想要这个,因为如果你希望一个对象在使用时始终是其他值,你应该首先使用另一个变量并跳过完全的对象。您可能对此有很大的动力,所以分享一下……可能有更好的方法!
  • @Evert 如果没有使用它,就不会有内置的 Object 原型来执行此操作。对我来说也不是很直观,但它就在那里。我想在数学库中说起来可能很方便

标签: javascript typescript class ecmascript-6


【解决方案1】:

使用valueOf() 并指定要返回的原语

class MyClass {
    constructor(a) {this.a = a }
    valueOf() { return this.a }
}


const t = new MyClass(7)

console.log(+t)

【讨论】:

  • 当然很酷,但它只适用于数字,看起来不太好。不过我可以在其他地方使用这个 valueOf!
  • 您希望它返回什么?也应该适用于字符串。你的用例是什么?
  • 我尝试将它与字符串一起使用,但它只返回 NaN。为了清楚起见,我现在编辑了问题
  • 那是因为你使用+ 转换为数字...字符串示例jsfiddle.net/cn319jsh
  • 您可能想使用Proxy
猜你喜欢
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-19
  • 2010-11-12
  • 2017-10-06
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多