2012-04-23 94 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