开发者问题收集

在 JavaScript 中使用 Class 实现递归

2019-08-20
298

我是 JS 新手 我被关于类的简单问题难住了

我需要做的就是将一些字符串放入代码中以使断言表达式有效

class Rec {
    constructor() {
        let a = 0;
        this['put here'] = () => a+++a;
    }
}

let inst = new Rec();
console.assert(
    inst == 1 && inst == 3 && inst == 5
);

注意到类有无穷无尽的值链,如

__proto__:
    constructor:
       prototype:
          constructor:
             prototype:
                ...etc

所以我尝试使用 __proto__ ,但得到了 Function.prototype.toString 要求“this”是一个 Function 错误。

1个回答

您可以使用 valueOf toString

class Rec {
    constructor() {
        let a = 0;
        this['valueOf'] = () => a+++a;
    }
}

let inst = new Rec();
console.log(
    inst == 1 && inst == 3 && inst == 5
);

此方法有效,因为对象 ( inst ) 和数字之间存在 抽象相等比较

根据 规范

对于比较 x == y

  1. If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.

对象的 ToPrimitive 调用 valueOf 方法如果 hint 是 Number。

如果展开表达式,它看起来像这样: a++ + a 。每次比较 inst 时,都会调用 valueOf 方法。并返回 a++a 的总和。

adiga
2019-08-20