扩展JS Boolean.prototype失败
问题描述:
我想这样做:扩展JS Boolean.prototype失败
a = false;
a.toggle();
console.log(a) // -> true;
所以我创造了这个:
Boolean.prototype.toggle = function(){this = !this; return this;}
但它只是不工作。我也尝试了很多类似的版本,但也总是失败。
我怀疑Boolean
对象有没有setter方法@其prototype
。但可能你们可以帮助解决这个问题。
在此先感谢。
(请不要回答“为什么a = !a
犯规好的吗?”)
答
首先,你永远不能分配给this
在JavaScript这样this = !this
将无法正常工作。
所有的第二,它不会出现在布尔对象有一个二传手。它有valueOf()
,它有toString()
。
这是最接近我能来参加吧:
Boolean.prototype.toggle = function(){return !this.valueOf();}
var a = false;
var b = a.toggle();
console.log(b) // -> true;
+0
是的,这就是我得到了太多最接近的一次。但不能改变切换功能的布尔值 – zsitro 2012-04-23 15:01:55
JavaScript的原语是不变的(同大多数语言)。这不会按照你想要的方式工作。 – 2012-04-23 14:55:31
我不是要问为什么'A = A'没有对你有好处!;我要*告诉*你这是正确的做法!在为语言添加无意义的扩展之前,请考虑其他程序员。 **每个**程序员都会明白'!a'的功能! – Jamiec 2012-04-23 14:57:51
Boolean.prototype.toggle已被Chrome接受。而其在对象,但它没有做预期的功能:■ – zsitro 2012-04-23 14:59:11