열거

2012-10-04 2 views
1

가능한 중복 :열거

function func1(arg) 
{ 
} 

function func2(arg) 
{ 
} 

... 
:

List of global user defined functions in JavaScript?

내가 자바 스크립트 파일 (은 .js)가 일부 기능이 포함되어

js 파일에 정의 된 모든 함수를 열거하고 싶습니다. javascript에 루트 객체가있어 모든 하위 객체를 열거합니까?

어글리 솔루션 (this post에 정의 된 방법에 의해)

하나의 방법과 같은 배열을 정의하는 것이다 VAR 함수 = FUNC1, FUNC2, ...]; 그것을 위해

/function.+(.+)/

이 나는 ​​더 나은 솔루션 :

또 다른 방법은 문자열 처리 (예 : 정규 표현식 등)입니까? 덕분에 .

var Stub = new Object(); 

Stub.func1 = function(args) {/*Your code*/}; 
Stub.func2 = function(args) {/*Your code*/}; 
Stub.func3 = function(args) {/*Your code*/}; 

// enumerate through functions 

for(f in Stub) 
{ 
    if (Stub.hasOwnProperty(f) && typeof Stub[f] === "function") 
     console.log(f); 
} 

여기 네임 스페이스/클래스로 객체 Stub '을 치료하고 있습니다 :

답변

1

자바 스크립트에는 루트 개체가 있으며 콘솔을 열고 this 또는 window을 입력하면됩니다. 전역 객체의 모든 기능을 나열 할 경우, 단지 전역 객체 치료를 같이하는 어떤 객체 :

for (var property in this) 
{ 
    if (this.hasOwnProperty(property) && typeof this[property] === 'function') 
    { 
     console.log(property + ' is a function'); 
    } 
} 

당신은 .hasOwnProperty 점검을두고 있지만, 기억할 수있는이 될 수 window을 포함하여 모든 객체, Object.prototype으로 거슬러 올라 가면 프로토 타입 메소드를 열거 할 수도 있습니다. 또한, 전역 객체는 자체 프로토 타입을 가지고 있습니다 : Window.prototype.
경고 단어 : X-browser 문제와 관련하여 전역 개체는 처리 할 최악의 개체 중 하나입니다. IE, 모질라, 크롬, 오페라 사파리는 모두 다른 점을 가지고 있습니다.

4

당신은 뭔가를 시도 할 수 있습니다.

EDIT : 제 3 자 JS 파일을 제어 할 수없는 경우에도 위의 기술을 사용하여 파일의 기능 목록을 파악할 수 있습니다. js 파일이 전역 네임 스페이스 (윈도우)에 새 함수를 정의한다고 가정합니다. 여기에 당신이 할 일은 다음과 같습니다.

1 단계 : 위의 스크립트를 실행하고 모든 기능을 창에 저장합니다 (스텁을 윈도우로 대체).

2 단계 : 새 JS 파일 (by adding a script tag linking to the external js file into the HEAD via JavaScript)을 동적으로로드하고 JS 파일을로드 한 후 (즉, 준비 됨 상태에서) 위의 스크립트를 다시 실행합니다.

3 단계 : 아직 2 단계에서보고 된 기능 중 1 단계에서 아직 방문하지 않은 기능은 JS 파일에서 도입 된 새로운 하위 집합입니다.

  • 그래서 여기 있습니다.
1

window을 사용하여 모든 전역 함수를 반복 할 수 있습니다. 그러나 그것은 많은 다른 속성을 포함합니다.

for(var fun in window){ 

    // your code 
} 
+0

감사합니다. greate. –

1

이 꽤 최대 해킹 방법이다; window 전역 개체를 열거하고 나열된 필터를 필터링하여 [native code]으로 필터링합니다.

for (var i in window) { 
    if (window.hasOwnProperty(i) && 
      'function' === typeof window[i] && 
      !Function.toString.call(window[i]).match('\[native code\]')) { 
     console.log(i) 
    } 
} 

아마도 크로스 브라우저는 아니지만 Chrome에서 작동했습니다. 네임 스페이스 안에 모든 함수를 넣을 수 있다면 더 좋을 것입니다.

+0

감사합니다. 도움을 주셨습니다. –