ES6中返回JavaScript类的值而不是对象引用

7
我想创建一个类,使其在 ES6 中返回一个值而不是类对象。
这基本上和这个问题差不多,只不过是在 ES6 中。 这个问题稍微涉及一下,但你仍然需要显式调用一个属性。
我的意思是:
class Foo {
  constructor(value) {
    this.value = value;  // returns an object other than *this*.
  }
}    

var foo = new Foo(4);
console.log(foo) // 4

但目前它返回的是{value: 4}

3
为什么您想做这样的事情?这似乎没有意义。您实际上要解决什么问题? - Felix Kling
foo是一个对象,而不是原始类型。如果您只需要获取一个值,请使用常规的var value - kainlite
1
如果您不想创建类似于类的东西,只需使用返回值的函数即可。如果您不想要一个类,为什么要创建一个类呢! - Robert Moskal
我正在创建一个货币类。因此,它需要保留浮点值并返回字符串值。例如,4.5689 和“$4.57”。我已经创建了一个带有辅助函数的库来实现这一点。我只是想试一下 ES6 类。 :) - gojohnnygo
1个回答

10

valueOf 可以帮助你完成任何你想要做的事情:

class Foo {
  constructor(value) {        this.value = value; }
  valueOf()          { return this.value;         }
  ^^^^^^^^^
}    

var foo = new Foo(4);
console.log(+foo) // 4

你必须确保理解 valueOf 的工作原理。根据 文档

JavaScript 调用 valueOf 方法将对象转换为原始值。

因此,简单地引用对象不会调用 valueOf;当然,这会使你无法引用底层对象。它用于需要将对象强制转换为原始值的情况,例如在 +foo 中。 valueOf 与 ES6 无关;它适用于所有对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接