2011-01-02 5 views
2

javascript : 인덱싱 중에 객체에서 호출되는 함수는 무엇입니까?

이것은 잘못 표현 된 질문 일지 모르지만이 스 니펫을 고려해보십시오.

var foo = { bar : 1 }; 
var bar = foo['bar']; 

실제로 foo로 인덱싱 할 때 어떤 함수가 호출됩니까? 비슷하게, 다음과 같은 코드가 있다면 어떻게 될까?

var foo = { bar : 1 }; 
for(var x in foo) 
    dosomething(); 

foo의 어떤 함수가 실제로 for 문에서 호출 될 것인가? 주어진 객체에 대해이 두 시나리오의 동작을 변경하고 싶다면 어떻게해야합니까?

더 구체적으로 내가 실제로하고있는 일은 .net 개체를 MSHTML 문서로 전달하는 것입니다 (위의 foo는 실제로 개체가 될 것입니다). 개체는 IReflect를 구현하고 인덱스 호출 중에 (위 시나리오 1과 같이) GetProperties 및 GetFields 호출이 이루어집니다. 나는 그것을 구현할 수 있고 그것이 내 객체를 호출 할 수 있도록 찾고있는 속성을 알아야합니다.

+0

개체에 대한 속성 조회의 결과로 호출되는 JavaScript 함수가 없습니다. 특정 JS 인터프리터에 대한 구현 특정 메소드를 묻는 중입니까? – Phrogz

+0

나는 당신이 그렇게 말하지 않기를 바랬습니다. 구현 방법을 묻는 중일 수도 있지만 이러한 작업에 해당하는 기능이 있기를 바랬습니다. 그것은 편리했을 것입니다. 그럼 내 진짜 질문은 어떻게 내가 IReflect 개체에 대한 색인 생성을 할 수 있습니다 ... –

+0

실제로 당신이 실제로 '가치'속성 clr 개체를 만들 필요가 밝혀졌습니다! InvokeMember에 대한 호출이 인덱서 호출의 일부 유형을 제공 할 것으로 예상했지만 실제로 인덱싱을 속성 호출로 변환했습니다 ... 여전히 열거 형을 열거하려고합니다. –

답변

0

첫 번째 부분은 컬렉션의 항목 인덱스에 따라 고유 한 PropertyInfo 개체를 만들고 반환하는 것입니다. 나는 아직도 for..in과 호환되는 방법을 알아 내지 못했다.

1

마치 PHP에서와 같이 마법의 getter와 setter를 찾는 것처럼 들립니다. John Resig wrote an article에 관한 정보입니다. 하지만 모든 플랫폼에서 작동하지는 않습니다.

+0

나는이 개념이 매우 비슷하다고 생각한다. IReflect는 목적이 비슷하지만 clr 객체와 비슷하다고 생각합니다. –

관련 문제