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,这也是我得到的最接近的功能。但是不能改变切换函数的布尔值是的,这也是我得到的最接近的值。但无法更改切换函数中的布尔值