I am using Node REPL. When we define a constructor function like one here:
function Rabbit() { }
It's prototype object i.e Rabbit.prototype have the constructor property which can be referenced like this:
>> Rabbit.prototype.constructor
[Function: Rabbit]
This constructor property does not get listed in the Rabbit.prototype object but doing Rabbit.prototype.constructor and Rabbit.prototype["constructor"] gives this info appropriately.
>> Rabbit.prototype
{}
a) How can I view these default properties like constructor, hasOwnProperty, toString,valueOf etc. ? In browser while using the console, I get a nice little dropdown for that. I am expecting some kind of dir command for that.
b) And why there inherited properties are not shown, when I fire Rabbit.prototype in the console ? Is it desired because we want to show only user added stuff ?
c) And where are they actually defined Object or Function ?
EDIT :- Seems like these are added up to Object.prototype . Reference :
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype
Also,
>> Object.getOwnPropertyNames(Object.prototype)
[ 'constructor',
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'__defineGetter__',
'__lookupGetter__',
'__defineSetter__',
'__lookupSetter__' ]
Do we need to recursively traverse the prototype chain by applying Object.getOwnPropertyNames on each object for listing the owned and inherited ones ?
Regards.