【问题标题】:Extending the Boolean Object in Javascript with an 'invert' function使用“反转”函数在 Javascript 中扩展布尔对象
【发布时间】:2011-10-06 06:45:02
【问题描述】:

我想用一个原型函数来扩展布尔对象,它可以反转它的当前值。到目前为止,我一直在做这样的事情:

var bool = true;
bool = !bool;
console.log(bool);  // false

我扩展布尔对象的尝试没有结果。这就是我得到的结果:

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

var bool = true;
bool = bool.invert();
console.log(bool);  // false

接近,但不够接近。我正在寻找以下方面的解决方案:

var bool = true;
bool.invert();
console.log(bool);  // false

是的,我知道,扩展内置对象通常被认为是个坏主意。请让我们改天再讨论。

【问题讨论】:

  • 重点是什么,除了你试图改变状态之外,除了试图避免简单的重新分配之外,这样做的目的是什么:bool = !bool;
  • 也许我应该重新表述这个问题:如何使用原型改变对象的状态...谢谢。

标签: javascript boolean prototype-programming


【解决方案1】:

标量值在所有 oop 语言中都是不可变的,您需要一个新类

var BooleanBuilder = function( data ){ this._data = !!data; };

BooleanBuilder.prototype.valueOf = function() {
    return this._data;
};
BooleanBuilder.prototype.invert = function() {
    this._data = !this._data;
};

var bool = new BooleanBuilder(true);
alert(bool.valueOf());
bool.invert();
alert(bool.valueOf());  // false

但这不是很聪明,您可以将布尔值存储在一个对象中并将该对象作为引用传递

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多