2011-05-02 15 views
24

Necesito recorrer las propiedades de un objeto javascript. ¿Cómo puedo saber si una propiedad es una función o solo un valor?cómo saber si una variable de JavaScript es una función

var model = 
{ 
    propertyA: 123, 
    propertyB: function() { return 456; } 
}; 

for (var property in model) 
{ 
    var value; 
    if(model[property] is function) //how can I tell if it is a function??? 
     value = model[property](); 
    else 
     value = model[property]; 
} 
+1

posible duplicado de [¿Cómo puedo comprobar si una variable javascript es el tipo de función?] (Http://stackoverflow.com/questions/5999998/how-can-i-check-if-a-javascript- variable-es-tipo-función) – sierrasdetandil

Respuesta

47

Utilice la typeof operator:

if (typeof model[property] == 'function') ... 

Además, tenga en cuenta que debe estar seguro de que las propiedades que le iteración son parte de este objeto, y no se heredan como una propiedad pública en el prototipo de algún otro objeto en la cadena de herencia:

for (var property in model){ 
    if (!model.hasOwnProperty(property)) continue; 
    ... 
} 
+0

que solo es confiable si la propiedad es una función nativa. Si se trata de un objeto host, puede obtener cualquier cosa, incluso un error. – RobG

+0

@RobG Oh? 'typeof (new XMLHttpRequest) .getAllResponseHeaders' devuelve' "function" 'para mí en Safari, Chrome, Firefox y Opera. ¿Es esto un problema de IE, o hay un objeto o método de host diferente en el que estás pensando? (No es que dude, solo estoy buscando un ejemplo.) – Phrogz

4

siguiente podría ser útil para usted, creo.

How can I check if a javascript variable is function type?

Por cierto, estoy usando siguiente para comprobar la función.

// Test data 
    var f1 = function() { alert("test"); } 
    var o1 = { Name: "Object_1" }; 
    F_est = function() { }; 
    var o2 = new F_est(); 

    // Results 
    alert(f1 instanceof Function); // true 
    alert(o1 instanceof Function); // false 
    alert(o2 instanceof Function); // false 
+1

Aunque es poco probable, tenga en cuenta que esto fallará si está probando un valor de función que proviene de otro marco de ventana (ya que cada cuadro tiene su propia 'Función' raíz). – Phrogz

Cuestiones relacionadas