2014-10-29 6 views
0

고유 한 고유 값을 가진 객체를 만들 수 있기를 원했습니다. 그렇게하면 일반 변수처럼 표현식에서 사용할 수 있습니다. 그것은 아주 쉽다는 것이 드러났습니다. 제가 쉽게 뭔가를 놓치고 있는지 궁금합니다. 취할 것 같다는 것은 객체에 "valueOf"메소드가 포함되어 있는지 확인하는 것입니다. 좋아요 :고유 한 고유 값을 갖는 객체. getter를 수행하는 또 다른 방법

var p = { 
    a: 12; 
    valueOf: function(){return this.a+12} 
    } 

alert(p/3); // =8 

너무 "toString"방법을 포함하는 것이 좋습니다. 무슨 일이 일어나고있는 것 같아요 valueOf 메서드 없이는 개체에 대한 참조가 "개체 개체"를 반환 그냥 개체에 메서드를 찾을 때까지 프로토 타입 체인 올라간다. 로컬 메서드를 제공하면 메서드에서 아무 것도 반환 할 수 없습니다.

내가 시도한 모든 브라우저에서 작동하는 것 같습니다.

이것은 실제로 게터와 같은 기능을 제공하는 또 다른 방법입니다. getter는 객체의 속성에만 적용 할 수 있기 때문에 좀 더 좋습니다. 이렇게하면 객체 자체를 사용할 수 있습니다.

당신은 어떻게 생각하십니까? 이거 안전한가요? 어떤 함정이라도?

+1

* "정말 게터와 같은 기능을 제공하는 또 다른 방법입니다"* - 어떻게 그렇게 할 수 있습니까? Getters는 멤버에 대한 액세스를 제공합니다. 여기서는 객체 자체의 값을 재정의합니다. – Madbreaks

+0

참. 그러나 변수와 비슷한 참조로 값을 참조 할 수 있다는 점에서 getter와 같습니다. 또한 개체의 모든 속성이 여전히 유효합니다. 그것은 당신이 객체로 할 수있는 여분의 일입니다. –

답변

0

그럼이 패턴을 사용하기 시작해서 하나의 문제가 발견되었습니다. 위와 같은 객체 p를 만들면 인터프리터가 객체에 대한 참조를 어떻게 볼지 추측해야합니다.

예를 들어, P가 산술 표현식에 사용되면 개체의 valueOf() 메서드를 호출하여 해당 값을 가져옵니다. 그러나 p.a와 같은 p의 속성에 액세스하려고하면 p를 객체로 처리하고 예상 한대로 속성을 검색합니다.

대조적으로 getter가 p에 getter가있을 때 p.a에 액세스하면 getter를 실행 한 다음 결과의 속성 'a'를 가져 오려고 시도합니다. 미묘하게 다르지만 중요합니다.

모두 옳고 무엇을 해야할지 정확하게 추측하는 것 같습니다. 그러나 패턴을 사용하는 것은 AFAIK가 어디에도 문서화되어 있지 않은이 동작을 아는 데 의존합니다.