2012-07-29 2 views
1

개체 속성을 호출하려고 할 때마다 함수를 호출하고 결과를 반환 할 수 있도록 함수로 개체 속성을 재정의하고 싶습니다.함수로 JavaScript 속성 재정의

확실히 JS와 같은 동적 언어에서 가능해야합니까?

상황 :

내가 포트에 다른 브라우저에 일부 IE 전용 코드를 시도하고있다. 이 코드는 XML 문서를 구문 분석하고 쿼리하기 위해 "Microsoft.XMLDOM"개체를 광범위하게 사용합니다. 비 IE 브라우저에서 표준 DOMParser를 사용하고 싶습니다. 문제는 Microsoft 구현이 XML 요소에 대한 비표준 '텍스트'속성을 노출하고이 속성이 코드 기반에서 광범위하게 사용된다는 점입니다. Element 프로토 타입에 동일한 기능을 추가하고 싶습니다. 코드베이스는 'myelem.text'을하면, 그것은 실제로 기능을 실행하지 않기 때문에

Element.prototype.text = function() {...} 

그것은 단지에 대한 포인터를 반환 작동하지 않습니다.

이 작업을하려면 어떻게해야합니까? 당신이 함수에 외부 인수가 필요하지 않은 경우

+0

JS 게터와 세터를 지원하는 대상 브라우저가 있습니까? –

+0

감사합니다. @AnthonySottile에 대해 알아 보았습니다. – Leor

+0

확장 성 (나중에 코드 사용)을 위해서'text' 속성의 존재 유무에 기반한 자신의 메서드 (또는 함수)를 추가해야 함수를 실행하거나 속성을 반환 할 수 있습니다. 그런 식으로 문서를 처리하면 항상 동일한 것을 호출합니다. – Sherbrow

답변

1

현대적인 자바 스크립트 (예 : IE 이외의 다른 언어)에서는 Object.defineProperty으로 충분합니다.

Object.defineProperty(Element.prototype, 'text', { 
    'get': function() { 
     return this.getText(); 
    }, 
    'enumerable': true 
}); 
+0

잘 작동합니다. 감사! – Leor

0

, 당신은 다음과 같이 그것을 정의한 후 실행할 수 있습니다 :

Element.prototype.text = (function() {...})(); 

을 그리고,

Element.text 

를 호출 한 후 반환 된 값을 얻을 것이다 함수에서.

+0

요소가 변경된 경우 요소의 내용을 반드시 나타내지는 않는 정적 속성입니다. – jfriend00