I am running into a hangup while trying to leverage Object.defineProperty()
on a base object. I want to inherit properties from that object, using Object.create()
, and then define more properties in the derived object (which may be inherited from there). I should note that I am targetting this at node.js.
Here's an example:
var Base = {};
Object.defineProperty(Base, 'prop1', {
enumerable:true,
get:function(){ return 'prop1 value';}
});
Object.defineProperty(Base, 'prop2', {
enumerable:true,
value : 'prop 2 value'
});
Object.defineProperty(Base, 'create', {
value:function(){
return Object.create(Base);
}
});
console.log(Base);
var derived = Base.create();
Object.defineProperty(derived, 'prop3', {
enumerable:true,
value:'prop 3 value'
});
console.log(derived);
Which outputs the following:
{ prop1: [Getter], prop2: 'prop 2 value' }
{ prop3: 'prop 3 value' }
I thought that console.log() would enumerate the inherited properties, as well as the property prop3
that I defined on the derived object. It would seem that it does not look up the prototype hierarchy for properties defined in this way. Is that correct?
I looked at overriding the toString()
method for my object, but it seems that console.log() does not call that.
- How can I get all properties logged without having to enumerate through them?
- Is this a valid way to implement inheritance?
EDIT:
- Is there another function in node.js' libraries that would do the job and log the inherited properties?
you can use
console.dir()
where availableand it'll show the inherited properties of your object on the
__proto__
objectEdit : doesnt seem to show up on node though
Firebug does log the inherited properties:
while Chrome gives you a tree-view which includes the inherited properties: