2011-09-25 15 views
6

Por ejemplo,Obtener todas las funciones de un objeto en JavaScript

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

será tratado como una propiedad y cuando escribo

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

se mostrará. Pero el resto de las funciones matemáticas no. ¿Cómo puedo obtener todas las funciones de un objeto Math?

+0

Simplemente curioso, ¿por qué lo necesitas? – zzzzBov

+0

'mymfunc' no debería aparecer en la enumeración porque está enumerando un objeto diferente (' Math' vs 'Object.prototype'). Si está ejecutando ese código en la consola, puede parecer como si lo hiciera, pero realmente la consola solo está mostrando el resultado de la tarea. – user113716

+0

Un posible uso: herramienta de documentación para objetos incorporados en JS. Otro uso: construir una UI para el objeto Math (una calculadora por ejemplo) – James

Respuesta

11

Object.getOwnPropertyNames(Math); es lo que está después.

Esto registra todas las propiedades siempre que se trate de un navegador compatible con EcmaScript 5.

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

¡funciona! ¡bonito! – Andr

0

console.log(Math) debería funcionar.

+1

Excepto que no le da acceso programático a ellos, lo que imagino es lo que está buscando el OP. – James

2

The specification no parece definir con qué propiedades Math las funciones se definen con. La mayoría de las implementaciones, al parecer, aplican DontEnum a estas funciones, lo que significa que no se mostrarán en el objeto cuando se iteren con un bucle for(i in Math).

¿Puedo preguntar para qué necesita hacer esto? No hay muchas funciones, por lo que puede ser mejor simplemente definir a sí mismo en una matriz:

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); 

Eso le da una matriz con los nombres de las propiedades que son funciones. La respuesta aceptada te dio nombres de todas las propiedades.

Cuestiones relacionadas