2012-04-23 92 views
0

我想这样做:扩展JS Boolean.prototype失败

a = false; 

a.toggle(); 

console.log(a) // -> true; 

所以我创造了这个:

Boolean.prototype.toggle = function(){this = !this; return this;} 

但它只是不工作。我也尝试了很多类似的版本,但也总是失败。

我怀疑Boolean对象有没有setter方法@其prototype。但可能你们可以帮助解决这个问题。

在此先感谢。

(请不要回答“为什么a = !a犯规好的吗?”)

+1

JavaScript的原语是不变的(同大多数语言)。这不会按照你想要的方式工作。 – 2012-04-23 14:55:31

+0

我不是要问为什么'A = A'没有对你有好处!;我要*告诉*你这是正确的做法!在为语言添加无意义的扩展之前,请考虑其他程序员。 **每个**程序员都会明白'!a'的功能! – Jamiec 2012-04-23 14:57:51

+0

Boolean.prototype.toggle已被Chrome接受。而其在对象,但它没有做预期的功能:■ – zsitro 2012-04-23 14:59:11

回答

3

首先,你永远不能分配给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