Búsqueda de sitios web

javascript - ¿Cómo comprobar si un objeto anónimo tiene un método?


¿Cómo puedo verificar si un objeto anónimo que fue creado de esta manera:

var myObj = { 
    prop1: 'no',
    prop2: function () { return false; }
}

¿realmente tiene una prop2 definida?

prop2 siempre estará definido como una función, pero para algunos objetos no es obligatorio y no estará definido.

Intenté lo que se sugería aquí: ¿Cómo determinar si un objeto JavaScript nativo tiene una propiedad/método? pero no creo que funcione para objetos anónimos.

Respuesta #1

typeof myObj.prop2 === 'function'; te permitirá saber si la función está definida.

if(typeof myObj.prop2 === 'function') {
    alert("It's a function");
} else if (typeof myObj.prop2 === 'undefined') {
    alert("It's undefined");
} else {
    alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2);
}

Respuesta #2

Quieres hasOwnProperty():

var myObj1 = { 
	prop1: 'no',
	prop2: function () { return false; }
}
var myObj2 = { 
	prop1: 'no'
}

console.log(myObj1.hasOwnProperty('prop2')); // returns true
console.log(myObj2.hasOwnProperty('prop2')); // returns false
	

Referencias: Mozilla, Microsoft, phrogz.net.

Respuesta #3

3 opciones

  1. typeof myObj.prop2 === 'function' si el nombre de la propiedad no es dinámico/generado
  2. myObj.hasOwnProperty('prop2') si el nombre de la propiedad es dinámico, y solo verifica si es una propiedad directa (no en la cadena de prototipos)
  3. `${'prop2' in myObj}` si el nombre de la propiedad es dinámico, y verifica a lo largo de la cadena de prototipos

Artículos relacionados