Javascript 扩展JS Boolean.prototype失败

Javascript 扩展JS Boolean.prototype失败,javascript,boolean,prototype,Javascript,Boolean,Prototype,我想这样做: a = false; a.toggle(); console.log(a) // -> true; 所以我创造了这个: Boolean.prototype.toggle = function (){this = !this; return this;} 但它就是不起作用。我也尝试了许多类似的版本,包括valueOf和其他什么,但总是失败 我怀疑Boolean对象在其原型上没有setter方法。但也许你们能帮上忙 提前谢谢 (请不要回答“为什么a=!a对你不好?”)首先

我想这样做:

a = false;

a.toggle();

console.log(a) // -> true;
所以我创造了这个:

Boolean.prototype.toggle = function (){this = !this; return this;}
但它就是不起作用。我也尝试了许多类似的版本,包括valueOf和其他什么,但总是失败

我怀疑
Boolean
对象在其
原型上没有setter方法。但也许你们能帮上忙

提前谢谢


(请不要回答“为什么
a=!a
对你不好?”)

首先,你不能在javascript中将
分配给这个
,所以
这个=!这
不起作用

其次,布尔对象似乎没有setter。它有
valueOf()
toString()

这是我最接近它的地方:

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

var a = false;
var b = a.toggle();

console.log(b) // -> true;​

首先,您永远不能在javascript中将
分配给this
,所以
this=!这
不起作用

其次,布尔对象似乎没有setter。它有
valueOf()
toString()

这是我最接近它的地方:

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

var a = false;
var b = a.toggle();

console.log(b) // -> true;​

JavaScript原语是不可变的(与大多数语言相同)。这不是你想要的方式。我不会问为什么
a=!a
对你没有好处;我会告诉你这是正确的方法!在向语言添加无意义的扩展之前,请考虑一下其他程序员。每个程序员都会明白什么是
!a
可以!Chrome已接受Boolean.prototype.toggle。它在对象中,但没有实现预期的功能:sJavaScript原语是不可变的(与大多数语言中的原语相同)。这不是你想要的方式。我不会问为什么
a=!a
对你没有好处;我会告诉你这是正确的方法!在向语言添加无意义的扩展之前,请考虑一下其他程序员。每个程序员都会明白什么是
!a
可以!Chrome已接受Boolean.prototype.toggle。它在对象中,但它没有实现预期的功能:sYes,这也是我得到的最接近的功能。但是不能改变切换函数的布尔值是的,这也是我得到的最接近的值。但无法更改切换函数中的布尔值