Расширение булева объекта в Javascript с помощью функции «инвертировать» - PullRequest
5 голосов
/ 06 октября 2011

Я хотел бы расширить объект Boolean функцией-прототипом, которая инвертирует его текущее значение.До сих пор я делал что-то вроде этого:

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

Мои попытки расширить объект Boolean не были плодотворными.Вот как далеко я добрался:

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

Да, я знаю, расширение встроенного объекта обычно считается плохой идеей.Пожалуйста, оставим это обсуждение на следующий день.

1 Ответ

4 голосов
/ 06 октября 2011

Скалярные значения неизменны на всех языках, вам нужен новый класс

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

но это не так умно, вы можете сохранить логическое значение в одном объекте и передать этот объект как ссылку

...