First, the function Empty() {}
representation is V8 stuff.
In V8, the Function.prototype
object has "Empty
" as the value of the Function.prototype.name
property, so I guess you are probably using the Chrome's Developer Console, and it displays the name of the function in this way.
The name
property of function objects is non-standard
(not part of ECMA-262), that's why we see differences between implementations.
Now, Function.prototype
is a function, that returns always undefined
and can accept any number of arguments, but why?. Maybe just for consistency, every built-in constructor's prototype is like that, Number.prototype
is a Number
object, Array.prototype
is an Array
object, RegExp.prototype
is a RegExp
object, and so on...
The only difference (for example, between any function object and Function.prototype
) is that obviously Function.prototype
inherits from Object.prototype
.
it seems everything in javascript start from Object.prototype, am I right about that?
Well, you're right Object.prototype
is the last object of the prototype chain of most objects, but in ECMAScript 5, you can even create objects that doesn't inherit from anything (just like Object.prototype
is), and form another inheritance chain, e.g.:
var parent = Object.create(null),
child = Object.create(parent);
Object.prototype.isPrototypeOf(parent); // false
Object.getPrototypeOf(parent); // null
Object.getPrototypeOf(Object.prototype); // null
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…