Because "field" has a string value, no instances of SubObject share the same actual value. They all get copies of the string literal. Now if we do:
function Parent() {}
Parent.prototype = {
foo: {}
};
Every instance of Parent shares the same instance of the object referred to using the foo property:
var a = new Parent();
var b = new Parent();
alert(a.foo === b.foo); // alerts true
Now:
function Child() {}
Child.prototype = new Parent();
Child.prototype.foo = {};
var a = new Parent();
var b = new Child();
alert(a.foo === b.foo); // alerts false
All instances of Parent share the same foo property. All instances of Child share the same foo property, but a direct instance of Parent (a) does not share the same foo property as a direct instance of Child (b).