我有一个原型函数,将布尔true
更改为false
,反之亦然。
Boolean.prototype.switch = function() {
return this.toString() === 'false';
};
目前我必须使用以下内容来更改原始值。
var a = true;
a = a.switch();
有没有办法可以在没有a
的情况下更改原始变量(a =
)?这意味着下面的脚本运行与上面相同?
var a = true;
a.switch();
我正在创建一个快速游戏,并且在游戏中有25个块可以具有打开或关闭的值,或者在我创建时,true
或false
。单击该块时,它会切换值。当我在制作代码来切换值时,如果有办法删除a =
并仍然更改值,我会有点好奇。
注意我不是在寻求有关如何制作此原型函数的帮助,我问是否有办法在作业中没有左手边更改值
答案 0 :(得分:1)
不,那是不可能的 - Boolean
对象实际上是不可变的。
您无法在方法中分配this
,Boolean
对象也不会公开任何方法来更改您自己可能调用的值。
答案 1 :(得分:0)
您可以使用所需的行为实现自己的对象,但要注意严格的相等性:
// Constructor
function MyBool(trueOrFalse) {
this.value = !!trueOrFalse;
}
// Switch method
MyBool.prototype.switch = function() {
this.value = !this.value;
}
// Custom valueOf and toString methods to act like a primitive
MyBool.prototype.valueOf = function() {
return this.value;
}
MyBool.prototype.toString = function() {
return '' + this.value;
}
// Initialise as false
var a = new MyBool(false);
document.write('a is currently: ' + a);
// Switch to true
a.switch()
document.write('<br>a is now: ' + a);
// Use in expression
document.write('<br>a == true? : ' + (a == true))
document.write('<br>a === true? : ' + (a === true)) // Ooops!
document.write('<br>!!a === true? : ' + (!!a === true)) // Work around
document.write('<br>in contional : ' + (a? 'true' : 'false'))