Anteayer, un internauta me dejó un mensaje preguntándome, ¿qué es Object? Dado que he estado ocupado reconstruyendo el control TreeView durante los últimos dos días, lamento mucho no haber respondido a tiempo. Tómese un tiempo hoy para ver qué es exactamente un objeto en JavaScript. ¿Cuál es la relación entre Objeto y Función? Acepto correcciones si me equivoco.
Aunque es un mensaje privado, espero que no me culpes si lo envías de forma anónima. Si hay algún problema, házmelo saber.
¿Qué es exactamente el Objeto de js?
Al principio pensé que Object era el prototipo de todos los objetos en js.
Pero: alert(Object.constructor) muestra la función Función...
¿Esto significa que el prototipo de Objeto es Función?
Pero el problema vuelve a surgir:
Function.prototype.read=function(){};//Prototipo de función extendida
for(var i in Object)alert(i)//muestra leído, lo que confirma además que el prototipo de Object es Function
Object.prototype.read=function(){};//extiende el prototipo de Object
for(var i in Function)alert(i)//Mostrar lectura, ¿el prototipo de función es objeto? ? ? ?
¿Qué es exactamente el objeto? ¿Son objetos y funciones como clases lo mismo?
Este amigo confundió Constructor, Prototipo y Función porque JavaScript es un lenguaje basado en objetos (JavaScript no contiene clases adecuadas). En realidad, es posible decir que Objeto es el prototipo de todos los objetos, pero esto se refiere al concepto de prototipo en el Patrón de prototipo en el patrón de diseño, no a la característica del lenguaje de prototipo de JavaScript llamada Object.prototype.
Entonces, ¿qué es exactamente un objeto en JavaScript? Script56.chm (el tutorial oficial de M$) dice: Proporciona funciones comunes para todos los objetos JScript. Bueno, ¿entiendes? Porque debería entenderlo, pero parece que todavía no entiendo @_@. Si observamos la estructura de datos, un objeto (una instancia de Object) es una colección desordenada, una estructura similar al mapa en C++, la tabla hash en C# y el mapa hash en Java. Y contiene un valor primitivo asignado por el sistema de lenguaje JavaScript. ¿Qué significa? El objeto tiene un método llamado valueOf, su función es devolver el valor original del objeto especificado. Esto también se puede encontrar en Script56, y también hay una tabla que enumera el valor de los resultados devueltos de los objetos del sistema. En otras palabras, objetos como Array, Boolean, Date, Function, Number, etc. en realidad provienen todos de Object, y sus antepasados son todos Object. Representan diferentes características del lenguaje. Por ejemplo, Array tiene un atributo de longitud administrado automáticamente, Boolean solo tiene valores verdaderos o falsos, Date representa una estructura de tiempo y Function se puede ejecutar. Todas estas son capacidades que les brinda su tipo original (valueOf). ). El objeto es en realidad solo un concepto. El lenguaje JavaScript se basa en objetos, lo que significa que todos los tipos integrados se abstraen de un conjunto de métodos y propiedades comunes (también llamados comportamientos y estados). estas características es Objeto. De hecho, Object no es muy útil en programación. Todos usamos el objeto de instancia de Object y luego usamos la función de colección de Object (expando) para expandir el objeto y convertirlo en lo que queremos. Para Object.prototype, en realidad no es muy útil, porque cada tipo específico tiene su propio prototipo y la mayoría de los métodos prototipo que agregamos son para ciertos tipos.
Además del prototipo, Object también tiene un atributo muy importante: el constructor. Esto se usa para completar la expansión del objeto que mencioné anteriormente. También es la base para que usemos JavaScript para simular la programación orientada a objetos. Dado que todo en JavaScript es Objeto, también lo es el constructor, pero su tipo original es Función (ejecute Object.constructor.valueOf() para obtener: function Function() { [código nativo] }). Por supuesto, a la inversa, no todos los objetos JavaScript tienen un atributo de constructor y algunos objetos integrados no tienen un constructor.
Con respecto a la relación entre Objeto y Función, creo que este no es un buen código de prueba: Function.prototype.read=function(){};//Prototipo de función extendida
for(var i in Object)alert(i)//muestra leído, lo que confirma además que el prototipo de Object es Function
Object.prototype.read=function(){};//extiende el prototipo de Object
for(var i in Function)alert(i)//Mostrar lectura, ¿el prototipo de función es objeto?
Estas cuatro líneas de código se utilizan para explicar el principio del prototipo de JavaScript y simular el método de herencia del prototipo de la programación OO. Son bastante atractivos, pero no pueden explicar claramente la relación entre Objeto y Función: (¡Al contrario, engañarán! la audiencia.
Describamos brevemente cada una de las diversas funciones en los tipos de objetos de JavaScript:
Objeto nativo: objetos proporcionados por el lenguaje JavaScript que no dependen del host de ejecución. Algunos de ellos son objetos integrados, como Global y Math, algunos se crean y utilizan en el entorno de ejecución del script, como: Array, Boolean; , Fecha, Función, Número, Objeto, RegExp, Error.
Objeto integrado: los objetos integrados proporcionados por el lenguaje JavaScript que no dependen del host de ejecución, como los objetos integrados Global y Math, son todos objetos nativos.
Objeto host: cualquier objeto proporcionado por el lenguaje JavaScript que depende del entorno host. Todos los objetos no nativos son objetos host, como: ventana en IE, instancia de wscript en WScript, cualquier clase creada por el usuario.