sirve que para objects getprototypeof __proto__ javascript

javascript - para - que es un prototype



¿Qué es el__proto__ de Function? (2)

Para integrar CMS excelente respuesta:

Parece que todo en javascript comienza desde Object.prototype, ¿tengo razón al respecto?

Absolutamente, los objetos en JavaScript están encadenados al Objeto básico. La cadena de herencia funciona en tiempo de ejecución, por lo que si se modifica un objeto base, todo lo que se le encadene heredará las modificaciones al instante. Si un Objeto no tiene un método o una propiedad, la implementación de Javascript seguirá la cadena del prototipo hasta que lo encuentre o fallará.

__proto__ es un acceso estándar al prototipo, que se admite en todos los navegadores, pero no en IE. De todos modos no está destinado a ser utilizado por el código de la aplicación.

Veo este bonito diagrama y he realizado algunas pruebas en mi navegador Chrome, pero no sé cómo explicar esto:

> Function.prototype function Empty() {} > Function.__proto__ function Empty() {} > typeof(Empty) "undefined"

¿Qué es la function Empty() {} y por qué Function.prototype es una function no un object como Object.prototype ?

En el diagrama de arriba, parece que todo en JavaScript comienza desde Object.prototype , ¿tengo razón al respecto?


Primero, la representación de la function Empty() {} es V8 .

En V8, el objeto Function.prototype tiene el valor "Empty " como valor de la propiedad Function.prototype.name , por lo que supongo que probablemente esté utilizando la Consola de desarrollador de Chrome y muestre el nombre de la función de esta manera.

La propiedad de name de los objetos de función non-standard es non-standard (no es parte de ECMA-262), por eso vemos diferencias entre implementaciones.

Ahora, Function.prototype es una función que siempre devuelve undefined y puede aceptar cualquier número de argumentos, ¿pero por qué? Tal vez solo por coherencia, todo prototipo de constructor integrado es así, Number.prototype es un objeto Number , Array.prototype es un objeto Array , RegExp.prototype es un objeto RegExp , y así sucesivamente ...

La única diferencia (por ejemplo, entre cualquier objeto de función y Function.prototype ) es que, obviamente, Function.prototype hereda de Object.prototype .

Parece que todo en javascript comienza desde Object.prototype, ¿tengo razón al respecto?

Bueno, tienes razón. Object.prototype es el último objeto de la cadena de prototipos de la mayoría de los objetos, pero en ECMAScript 5, incluso puedes crear objetos que no se heredan de nada (como Object.prototype es Object.prototype ) y formar otro. cadena de herencia, por ejemplo:

var parent = Object.create(null), child = Object.create(parent); Object.prototype.isPrototypeOf(parent); // false Object.getPrototypeOf(parent); // null Object.getPrototypeOf(Object.prototype); // null