En primer lugar, la representación es function Empty() {}
V8 cosas.
En V8, el objeto Function.prototype
tiene "Empty
"como el valor de la propiedad Function.prototype.name
, así que supongo que probablemente está utilizando la consola de desarrollo de Chrome, y se muestra el nombre de la función de esta manera.
El name
propiedad de los objetos de función es non-standard
(no forma parte de ECMA-262), es por eso que vemos diferencias entre implementaciones.
Ahora, Function.prototype
es una función, que devuelve siempre undefined
y puede aceptar cualquier número de argumentos, pero ¿por qué? . Tal vez solo por coherencia, cada construcción incorporada El prototipo de Tor 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 un objeto y la función Function.prototype
) es que obviamente Function.prototype
hereda de Object.prototype
.
Parece que todo en javascript comienza desde Object.prototype, ¿estoy en lo cierto al respecto?
Bueno, tienes razón Object.prototype
es el último objeto de la cadena de prototipo de la mayoría de los objetos, pero en ECMAScript 5, incluso se puede crear objetos que no se heredan de nada (al igual que Object.prototype
es), y formar otra 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
La respuesta a este acertijo es esa Función .__ proto __.__ proto__ === Object.prototype. Pero no llegará allí a través del Function.constructor.prototype, porque se configuró en undefined (o no se configuró en absoluto). – Stefan
+1 Siempre pienso que la forma más directa de explicar algo es dibujar una imagen/diagrama y dejarla hablar. Gracias por adjuntar el diagrama aquí! –