2010-05-30 6 views
2

나는 자동으로이 기능의 일반화를 통해, 주어진 자바 스크립트 객체합니다 ( 숨겨진 포함)의 모든 속성을 결정하는 데 싶습니다Javascript 개체에서 숨겨진 속성/메서드를 찾는 방법은 무엇입니까?

function keys(obj) { 
    var ll = []; 
    for(var pp in obj) { 
     ll.push(pp); 
    } 
    return ll; 
} 

이 사용자 정의 개체에 대한 작동하지만 많은 실패 내장 명령은 :

repl> keys({"a":10,"b":2}); // ["a","b"] 
repl> keys(Math) // returns nothing! 

기본적으로, 나는 새로운 객체를 탐구 정말 유용한 파이썬의 디렉토리()와 도움()의 등가물을 작성하고 싶습니다.

내 이해는 숨겨진 속성 (사용자 코드 evidently은 HTML5까지 "열거 가능"속성을 설정할 수 없음)을 이해하므로 수학, 문자열 등의 속성을 단순히 하드 코딩하여 dir() 이에 상응합니다 (예 : here과 같은 목록 사용). 그러나 더 좋은 방법이 있습니까?

편집 : 좋아, 지금까지 본 최고의 답변은 this thread입니다. 자신의 JS 코드로는이 작업을 쉽게 수행 할 수 없지만 그 다음으로 가장 좋은 방법은 Chrome의 개발자 도구 (Chrome ->보기 -> 개발자 -> 개발자 도구)에서 console.dir을 사용하는 것입니다. console.dir (Math)을 실행하고 삼각형을 클릭하여 모든 방법을 나열하십시오. 대부분의 대화식/검색 작업에 충분합니다 (런타임에이 작업을 실제로 수행 할 필요는 없습니다).

답변

5

ECMAScript 5th ed.은 열거되지 않은 항목을 포함하여 개체에 전달 된 모든 속성의 배열을 반환하는 것으로 정의합니다. Chrome 만이 지금까지 이것을 구현했습니다.

Object.getOwnPropertyNames({a: 10, b: 2}); 

Object.getOwnPropertyNames(Math); 

["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]

+0

아하. 그래서 이것이 크롬이하는 일입니다. 하드 코딩 한 것 같습니다. – ramanujan

3

이 내용은 previous answer에 설명되어 있습니다. 기본적으로이 스펙은 명시 적으로 (DontEnum을 사용하여) 이러한 오브젝트를 열거 할 수 없도록 요구합니다.

+0

확실히. 그 스레드에서 console.dir 응답은 내가 찾고있는 것이라고 생각합니다. 그래서 저를 가리켜 주셔서 감사합니다. – ramanujan

4

Object.getOwnPropertyNames는 "숨겨진 것들"을 반환하지 않습니다 제공 (특별한 순서없이) ["b", "a"]을 제공합니다.
Object.getOwnPropertyNames은 상속되지 않은 속성의 이름을 반환합니다.

0

이 방법은 개체 메서드를 찾기 위해 방화 광에서 작동합니다.

Object.getOwnPropertyNames (수학);