I have some object, say son, which I\'d like to inherit from another object father.
Of course I can make a constructor function for father,
You're right, __proto__ is a non-standard property, and the only two standard ways you have to set a new object's [[Prototype]], are:
new operator (as you already mention).Object.create is not widely supported yet (works on IE9Pre3+, Firefox 3.7Alpha+, Chrome 5+ Safari 5+, Rhino 1.7), but at some point all the implementations will conform the ES5 spec.
It can take two arguments, the first one is the object that will be used as the [[Prototype]] of the new object, and the second one, is another object where the own properties can be described (in the same structure that you would use Object.defineProperties).
For example:
var father = {
firstProperty: 1,
secondProperty: 2
};
var son = Object.create(father, {
thirdProperty: {
value: 'foo'
}
});
father.isPrototypeOf(son); // true
son.firstProperty; // 1
The son internal [[Prototype]] property will refer to father, and it will contain a value property named thirdProperty.