2011-09-25 3 views
6
예를 들어

에서 개체의 모든 기능을 가져, 자바 스크립트

Math.mymfunc = function (x) { 
    return x+1; 
} 

는 속성으로 처리됩니다 내가

for(var p in Math.__proto__) console.log(p) 

을 쓸 때이 표시됩니다. 그러나 나머지 수학 함수는 그렇지 않습니다. Math 객체의 모든 함수를 얻으려면 어떻게해야합니까?

+0

궁금한 점, 왜 필요합니까? – zzzzBov

+0

다른 개체 ('Math' 대'Object.prototype')를 열거하기 때문에'mymfunc'가 열거 형에 나타나서는 안됩니다. 콘솔에서 해당 코드를 실행하고있는 것처럼 보이지만 실제로 콘솔에 할당 결과가 표시됩니다. – user113716

+0

하나의 가능한 사용 - JS 내장 객체 용 문서화 도구. 또 다른 사용법 - Math 객체 (계산기 등)에 UI를 작성하는 것 – James

답변

11

Object.getOwnPropertyNames(Math); 당신이 후에 무엇이다.

이것은 EcmaScript 5 호환 브라우저를 다루는 모든 속성을 기록합니다. 당신에게 기능있는 속성의 이름의 배열을 제공

var objs = Object.getOwnPropertyNames(Math); 
for(var i in objs){ 
    console.log(objs[i]); 
} 
+0

그것은 작동합니다! 좋은! – Andr

0

console.log(Math)이 작동해야합니다.

+1

OP를 찾는 사람들이 프로그래밍 방식으로 액세스 할 수 있다는 것을 제외하고는 상상할 수 있습니다. – James

2

The specificationMath 함수가 정의 된 속성으로 정의 된 것으로 나타나지 않습니다. 대부분의 구현에서는이 함수에 DontEnum을 적용합니다. 즉, for(i in Math) 루프를 반복 할 때 객체에 나타나지 않습니다.

이 작업을 수행하는 데 필요한 정보를 물어보십시오. 이 많은 기능이 없으므로 단순히 배열에 그들에게 자신을 정의하기 위해 최선을 다 할 수있다 :

var methods = ['abs', 'max', 'min', ...etc.]; 
3
var functionNames = []; 

Object.getOwnPropertyNames(obj).forEach(function(property) { 
    if(typeof obj[property] === 'function') { 
    functionNames.push(property); 
    } 
}); 

console.log(functionNames); 

. 받아 들여진 응답은 당신에게 모든 재산의 이름을 주었다.