객체를 JavaScript에서 비교하는 방법을 어떻게 정의 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/441144

  •  22-07-2019
  •  | 
  •  

문제

JavaScript 클래스, foo를 정의하고 싶습니다.

Foo = function(value){
    this.value = value;
};

나는 내 foo의 "인스턴스"를 만들 것이다 :

foo1 = new Foo(1);
foo2 = new Foo(1);

그리고 나는 표준 == 평등 연산자를 사용하여 FOO의 인스턴스가 서로 비교하기를 원합니다.

foo1 == foo2;      // this should be true

나는 이것을 할 방법을 찾을 수 없다. 나는 내가 무언가를하고 있다고 생각했다 valueOf() 함수이지만 이것은 비교의 한쪽이 원시인 일 때만 유용합니다.

나는 루비와 정말 간단한 것을 놓쳤습니까?

def ==(obj); end
도움이 되었습니까?

해결책

JavaScript에는 작업자 과부하가 없습니다. 보다 이 토론 당신의 질문을 다루고 있습니다.

다른 팁

깨끗한 방법이 아닙니다 ...

Foo = function (value){
    this.value = value;
};

자신의 객체의 Tostring 함수를 무시하십시오.

Foo.prototype.toString = function( ){ return this.value.toString(); }

두 가지 테스트 개체 작성 :

foo1 = new Foo(1);
foo2 = new Foo(1);

객체의 값이 문자열 또는 숫자 인 경우, 빈 문자열에 추가하여 객체를 문자열로 변환하는 JavaScript 엔진을 가질 수 있습니다.

alert( ""+foo1 === ""+foo2 ); //Works for strings and numbers

똑같은 일이지만 더 깨끗합니다.

alert( foo1.toString() === foo2.toString() ); //Works for strings and numbers

객체의 값이 숫자 만 있으면 unery + 연산자를 사용하여 객체를 숫자로 변환 할 수 있습니다.

alert( +foo1 === +foo2 ); //Works for numbers

그러나 Tostring을 위와 같은 것으로 정의하는 것이 좋습니다.

Foo.prototype.equals=function(b){return this.toString() === b.toString();}

그런 다음 다음과 같이 부릅니다.

alert ( foo1.equals(foo2) );

이제 Tostring을 정의 했으므로 다음을 수행 할 수 있습니다.

alert(foo1); // Alerts the value of foo1 instead of "[Object object]"
alert("foo1: " + foo1); // Alerts "foo1: 1". Useful when debugging. 

나는 이것이 JavaScript를 사용하여 불가능하다고 생각하지 않습니다. 자신의 기능을 작성해야합니다 isEqual()

JavaScript는 이와 관련하여 Java : Operator Overloading이 아닙니다. 와 같은 사용자 정의 메소드를 사용하십시오 equals() 대신에.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top