¿Es posible verificar una clase para ver si tiene un método o no? O incluso una propiedad particularCompruebe si una clase tiene un método
Respuesta
var target:Object;// = some object
var name:String;// = some name
if(name in target){
// if property/method exists
}else{
// if property/method not exists
}
+1 Pero tenga en cuenta que esto no mostrará las propiedades/funciones privadas/protegidas del objeto. – Amarghosh
Sí, probablemente no lo necesite si es privado o está protegido. gracias – numerical25
Esta es la única respuesta correcta en cuanto a si una propiedad/método existe realmente (es decir, es enumerable), porque una propiedad puede definirse realmente a pesar de mantener el valor 'indefinido', incluso con estricta igualdad. Por ejemplo: 'var obj: Object = {a: undefined};' rastreará true para 'obj [" a "] === undefined', pero la propiedad" a "aún está definida, como lo demuestra el siguiente trazado de bucle "a": 'para (var clave: * en obj) traza (clave); // rastrea "a" '. Para deshacerse de la propiedad, debe llamar a 'eliminar obj [" a "]'. Para buscar estrictamente una función no nula, 'if (target [name] is Function)' sería lo mejor. – Triynko
import flash.utils.describeType;
...
function methodExists(obj:Object,name:String):Boolean
{
var desc:XML=flash.utils.describeType(obj);
return (desc.method.(@name==name).length()>0);
}
(Nota: hecho de la parte superior de mi cabeza)
'describeType' no enumera las propiedades dinámicas . Pruébalo en este objeto, por ejemplo: 'var target: Object = {a: 123, b:" ASD ", c: función(): void {trace (" hello ");}}' - muestra la descripción de un plano objeto con solo 'hasOwnProperty',' isPrototypeOf' y 'propertyIsEnumerable'. – Amarghosh
No es necesario utilizar 'describeType', que es muy lento. – miguelSantirso
describeType puede ser lento, pero si crea un método para procesar el XML en una estructura orientada a objetos y lo guarda en caché en un diccionario por nombre de tipo, incurrirá en la sobrecarga de describeType solo en la primera ejecución para cualquier tipo dado , después de lo cual una simple búsqueda de caché de diccionario por nombre de tipo es muy rápida (getQualifiedClassName (instancia o clase) es aproximadamente 3000 veces más rápido). describe la única captura deType es que no captura las propiedades dinámicas, pero eso es por diseño. – Triynko
También puede llamar a métodos/propiedades de un método de matriz/de búsqueda como sigue. Si no existe, será 'indefinido', que también cuenta como 'falso'.
var target:Object;// = some object
if(target["propertyName"]){
// if property/method exists
}else{
// if property/method not exists
}
Puede ser mejor comprobar si hay 'if (target [" propertyName "] == undefined)' indefinido) '. De lo contrario, si la propiedad está definida pero configurada como algo que se evalúa como 'falso' (es decir, una cadena emtpy,' null', '0', o' false'), se considerará que "no existe". – IQAndreas
Si trato de usar eso en una función, me chocará con el error 1069, incluso cuando solo estoy comprobando si es verdadero o falso. Lo estoy haciendo con la palabra clave this (para investigación sintáctica). ¿Por qué? – Panzercrisis
Debe usar igualdad estricta (===) para comparar 'indefinido'. Además, solo las variables sin tipo 'var x: *' pueden almacenar el valor indefinido. Null es (==) undefined, pero no (===) undefined, por lo que si la propiedad existe y es nula, al comparar undefined with == se devolverá true, a pesar de la propiedad existente y que contiene un valor nulo. De hecho, incluso con igualdad estricta, una propiedad puede * definirse * y mantener el valor "indefinido", que todavía no es lo mismo que * siendo * indefinido (es decir, ejecutando un for (tecla var: * en obj) el bucle seguirá siendo devolver la propiedad). Por lo tanto, solo 'if (key in obj)' es correcto. – Triynko
- 1. jQuery: compruebe si un objeto tiene clase
- 2. Compruebe si la clase tiene el método estático
- 3. Compruebe si un formulario tiene una clave?
- 4. Compruebe si una función tiene un decorador
- 5. Compruebe si el elemento cliqueado no tiene una clase específica
- 6. Compruebe si una URL tiene http: // prefijo
- 7. Compruebe si la propiedad tiene el atributo
- 8. ¿Prueba si una clase tiene un atributo?
- 9. Compruebe si el cursor tiene resultados
- 10. Compruebe si el archivo tiene un formato CSV con Python
- 11. Compruebe si una cadena tiene espacio en blanco
- 12. Compruebe si el nodo Xml tiene un atributo
- 13. Tiempo de compilación compruebe si una clase base es "interfaz"
- 14. Compruebe si existe el método jQuery
- 15. Comprobar si la clase tiene método en PHP
- 16. ¿Cómo comprobar si una clase Java tiene un método particular en ella?
- 17. Compruebe si una ruta representa un archivo o una carpeta
- 18. ¿Por qué la clase python datetime tiene un método 'fromtimestamp', pero no un método 'totimestamp'? clase
- 19. Averiguar si existe un método en una clase estática
- 20. Cómo comprobar si el método tiene un atributo
- 21. jQuery: compruebe si el elemento tiene el atributo CSS
- 22. jQuery Determine si una clase coincidente tiene una identificación dada
- 23. Compruebe si todos los artículos tienen la misma clase
- 24. Compruebe si un UITableViewCell específico es visible en una UITableView
- 25. Compruebe si una cadena tiene al menos un número usando LINQ
- 26. Compruebe si una matriz de objetos tiene un valor de clave con guion bajo
- 27. ¿Cómo ver si una clase tiene una propiedad?
- 28. Dada una clase, vea si la instancia tiene el método (Ruby)
- 29. compruebe si una cadena es una URL
- 30. Compruebe si existe una tabla SQL
bien, parece que si hago una declaración if que verifica si la propiedad definida funciona. pero ¿qué ocurre con los métodos – numerical25
Relacionados: [Actionscript (flex): cómo saber si una propiedad de objeto existe (o está definida)?] (http://stackoverflow.com/questions/1520610) –