I thought every prototype should be an object.
why?
Array.isArray( Array.prototype ) // true
developer.mozilla.org explains nothing
I thought every prototype should be an object.
why?
Array.isArray( Array.prototype ) // true
developer.mozilla.org explains nothing
Your assumption that every prototype is an Object
is not correct.
console.log(String.prototype)
console.log(Number.prototype)
console.log(Boolean.prototype)
console.log(Array.prototype)
console.log(Object.prototype)
Output:
String {}
Number {}
Boolean {}
[]
Object {}
From the ECMAScript Language Specification - 15.4.4 Properties of the Array Prototype Object (emphasis mine)
The value of the [[Prototype]] internal property of the Array prototype object is the standard built-in Object prototype object (15.2.4).
The Array prototype object is itself an array; its [[Class]] is "Array", and it has a length property (whose initial value is +0) and the special [[DefineOwnProperty]] internal method described in 15.4.5.1.
Try typing this into your javascript console:
typeof Array.prototype;
The Array.prototype
is actually an Array. Which is detailed on this page.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype
It probably has something to do with the Fact that []
is shorthand for Array
.
So Array.prototype
points to []
.
Array.prototype.constructor
points to function Array() { [native code] }
[].constructor
also points to function Array() { [native code] }
So at a guess, it is done this way so that you can user Array
and []
interchangably.
I dont know for sure this is the reason, but thats my best guess.
But just trying to contribute however I can.
The prototype
is meant to add on functionality/capabilities to all Javascript objects, of which Array is a Javascript object. However, arrays are a special kind of object.
If you checked the typeof
for Arrays, it will reflect as object. (Source 1)
However, end of the day, you should think of them as Arrays ([]) and not objects per se ({}). So an array is a special kind of object, and because it's a JS object, it has access to prototype
which allows it to have access to new methods and properties. (Source 2)
This is based on my rudimentary research and understanding.