有没有办法在JavaScript中object
/ class
定义一个方法,就像toString
一样只为布尔值?示例(es6):
class MyClass {
toBoolean() {
return this.foo === bar;
}
}
所以我可以做这样的事情
const myClass = new MyClass();
if (myClass === true) baz();
对我来说听起来很疯狂,但我还会问。
答案 0 :(得分:4)
除了drewmoore指出它会成为一种蠕虫之外,它根本不可能在JavaScript中完成。
没有像在C ++中重载强制转换操作符那样“挂钩类型转换”的功能。
toString
似乎做类似事情的原因仅仅是因为许多functions implicitly try calling toString
on your objects, and the JavaScript interpreter also does this when you try to concatenate something to a string using +
但===
没有做那样的事情 - 实际上是{{{卖点'===
1}}它是没有类型转换。
所以没有办法将它神奇地转换为布尔值进行比较,就像这样。人们仍然必须使用if(myClass.toBoolean() === true)
,然后通过它实际做的命名方法更有意义,例如if(myClass.isValid())
或其他什么。
答案 1 :(得分:1)
在充分尊重的情况下,即使有可能,这也是一个糟糕的想法:
const myClass = new MyClass();
myClass.foo = true;
if (myClass === true) baz(); //true
if (myClass) foobaz(); //true, as expected, since myClass === true
myClass.foo = false;
if (myClass === true) baz(); // false
if (myClass) foobaz(); //true - wtf?
答案 2 :(得分:-1)
这将解决您将任何类型转换为布尔值的问题。
function Fun (){
}
Fun.prototype.toBoolean = function(a) {
return !!a;
}
var obj = new Fun("str");
obj.toBoolean("str");
obj.toBoolean(1);
obj.toBoolean({});
obj.toBoolean(0);