可以将对象评估为布尔值吗?

时间:2019-02-10 09:45:09

标签: javascript ecmascript-6

class Test {
    is_valid = true;

    constructor (value) {
        this.value = value
    }

    is_less_than (number) {
        if (this.value >= number)
            this.is_valid = false;
        return this;
    }

    is_greater_than (number) {
        if (this.value <= number)
            this.is_valid = false;
        return this;
    }
}

const is_valid = new Test(5).is_less_than(10),
      is_valid2 = new Test(5).is_less_than(10).is_greater_than(7);

if (is_valid)
    console.log(1); // 1
else
    console.log(0);

if (is_valid2)
    console.log(1);
else
    console.log(0); // 0

我想使用任何解决方案来实现该模式。我已经尝试过使用valueOf(),toString(),设置上下文,布尔值的各种测试...我不确定是否可能。如果您知道,请告诉我。


我不使用 is_valid 属性的原因是为了避免只使用方法更改结果而不使用 is_valid 的对象的错误。

下面的模式也是可能的,但并不令人满意。

new Test().is_less_than(10).is_valid(5)

1 个答案:

答案 0 :(得分:1)

在您的代码中,is_validis_valid2是类Test的实例,因此它们是对象。
要检查Test.is_valid的值,您应该使用类似以下的内容:

const is_valid = new Test(5).is_less_than(10).is_valid, 
      is_valid2 = new Test(5).is_less_than(10).is_greater_than(7).is_valid;