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
typeof myObj.prop2 === 'function'si el nombre de la propiedad no es dinámico/generadomyObj.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)- `${'prop2' in myObj}` si el nombre de la propiedad es dinámico, y verifica a lo largo de la cadena de prototipos
