Ответ 1
Во-первых, представление function Empty() {}
V8.
В V8 объект Function.prototype
имеет "Empty
"как значение свойства Function.prototype.name
, поэтому, я думаю, вы, вероятно, используете консоль разработчика Chrome, и таким образом отображает имя функции.
Свойство name
объектов функции non-standard
(не является частью ECMA-262), поэтому мы видим различия между реализациями.
Теперь Function.prototype
- это функция, которая возвращает всегда undefined
и может принимать любое количество аргументов, но почему?. Может быть, просто для согласованности, каждый встроенный прототип конструктора подобен этому, Number.prototype
является объектом Number
, Array.prototype
является объектом Array
, RegExp.prototype
является объектом RegExp
и т.д..
Единственное отличие (например, между любым объектом функции и Function.prototype
) состоит в том, что, очевидно, Function.prototype
наследует от Object.prototype
.
Кажется, что все в javascript начинается с Object.prototype, правильно ли я об этом?
Ну, вы правы Object.prototype
- последний объект цепи прототипов большинства объектов, но в ECMAScript 5 вы даже можете создавать объекты, которые не наследуются ни от чего (как, например, Object.prototype
), и образуют другую цепочку наследования, например:
var parent = Object.create(null),
child = Object.create(parent);
Object.prototype.isPrototypeOf(parent); // false
Object.getPrototypeOf(parent); // null
Object.getPrototypeOf(Object.prototype); // null