原型改变原创

时间:2016-05-08 21:46:36

标签: javascript prototype

我有一个原型函数,将布尔true更改为false,反之亦然。

Boolean.prototype.switch = function() {
    return this.toString() === 'false';
};

目前我必须使用以下内容来更改原始值。

var a = true;
a = a.switch();

有没有办法可以在没有a的情况下更改原始变量(a =)?这意味着下面的脚本运行与上面相同?

var a = true;
a.switch();

我正在创建一个快速游戏,并且在游戏中有25个块可以具有打开或关闭的值,或者在我创建时,truefalse。单击该块时,它会切换值。当我在制作代码来切换值时,如果有办法删除a =并仍然更改值,我会有点好奇。

注意我不是在寻求有关如何制作此原型函数的帮助,我问是否有办法在作业中没有左手边更改值

2 个答案:

答案 0 :(得分:1)

不,那是不可能的 - Boolean对象实际上是不可变的。

您无法在方法中分配thisBoolean对象也不会公开任何方法来更改您自己可能调用的值。

答案 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'))