pensé que esto sería tan fácil como:Cómo determinar si el objeto JavaScript nativo tiene una propiedad/método?
if(typeof(Array.push) == 'undefined'){
//not defined, prototype a version of the push method
// Firefox never gets here, but IE/Safari/Chrome/etc. do, even though
// the Array object has a push method!
}
y funciona bien en Firefox, pero no en IE, Chrome, Safari, Opera, vuelven todas las propiedades/métodos de la nativa Arregle el objeto como 'indefinido' usando esta prueba.
El método .hasOwnProperty (prop) solo funciona en instancias ... por lo que no funciona, pero por prueba y error me di cuenta de que esto funciona.
//this works in Firefox/IE(6,7,8)/Chrome/Safari/Opera
if(typeof(Array().push) == 'undefined'){
//not defined, prototype a version of the push method
}
¿Hay algo malo en usar esta sintaxis para determinar si existe una propiedad/método en un objeto nativo /~ "Clase JavaScript" ~, o hay una mejor manera de hacer esto?
Interesante ... Leí que .prototype era solo para agregar nuevas propiedades/métodos a los objetos, no pensé en usar typeof en él. p.ej. prototipo http://www.devguru.com/technologies/JavaScript/10764.asp typeof http://www.devguru.com/technologies/JavaScript/11529.asp – scunliffe
Es por eso, sí, pero no SOLO por eso . Recomiendo ver la presentación de Douglas Crockford sobre "Javascript avanzado" en el Teatro YUI (http://developer.yahoo.com/yui/theater/). Hay algunas cosas geniales, incluyendo cómo funcionan los prototipos de objetos. –
esto no verá las propiedades definidas en los prototipos principales –