【问题标题】:Is it possible to implement a member that returns both a function and a number in JavaScript?是否可以在 JavaScript 中实现一个同时返回函数和数字的成员?
【发布时间】:2018-10-31 08:44:53
【问题描述】:

我正在尝试模拟以下内容:

foo.bar // --> 3
foo.bar.baz() // --> 7

我尝试使用代理、getter、原型...

这甚至可以做到吗?如果有,怎么做?

【问题讨论】:

  • 没有什么可以既是数字又是函数。
  • 但是,您实际上似乎在寻找a number with a custom method,这是可能的,但不建议这样做。

标签: javascript proxy prototype getter-setter


【解决方案1】:

这可能不是您想要的,但一个(愚蠢的)选择是改变Number.prototype

const foo = {
  bar: 3
};
Number.prototype.baz = () => 7;
console.log(foo.bar);
console.log(foo.bar.baz());

除了那个 hack,我很确定你正在寻找的东西是不可能的,因为否则 foo.baz 将不得不被评估为一个 对象,而不是一个数字,在第二行,与第一行的条件相矛盾。

【讨论】:

    【解决方案2】:

    您可以(在某种程度上)使用valueOf 执行此操作。不过需要强制触发valueOf

    let foo = {
       bar: {
          valueOf: () => 3,
          baz: () => "baz"
       }
    }
    foo.bar.baz() //"baz";
    +foo.bar //3
    

    【讨论】:

    • @CertainPerformance "但是,你需要强制来触发 valueOf"
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2020-05-31
    • 2016-11-02
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多