2011-10-06 2 views
4

부울 객체를 현재 값을 반전하는 프로토 타입 함수로 확장하고 싶습니다. 지금까지 나는 다음과 같은 일을 해왔다.Javascript에서 부울 객체를 'invert'함수로 확장

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 

그래, 나도 알아, 구축 된 오브젝트하는 것은 일반적으로 좋은 생각으로 간주 연장하기. 다른 날을 위해 그 토론을 저장합시다.

+6

하지만 상태를 변경하려고한다는 사실 외에도 간단한 재 할당을 피하는 것 이외의 다른 목적은 무엇입니까? 'bool =! bool;'? –

+0

어쩌면 나는이 질문에 대해 다음과 같이 다시 말해야 할 것입니다. 어떻게 프로토 타입으로 객체의 상태를 바꿀 수 있습니까? 감사합니다. – trembl

+1

관련 항목 : http://stackoverflow.com/questions/4066094/change-value-of-a-wrapped-primitive-data-type – CMS

답변

4

스칼라 값은

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 

하지만이 똑똑하지, 당신은 하나의 객체에서 부울 값을 저장하고 참조

으로이 개체를 전달할 수있는 새로운 클래스를 필요로하는 모든 OOP 언어로 변경할 수 있습니다
관련 문제