Realmente no.
Dependiendo de lo que realmente necesite, una posibilidad puede ser establecer ocomo prototipo de un nuevo objeto.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
Entonces, cualquier propiedad que agregue obj no se agregarán o. Cualquier propiedad agregada objcon el mismo nombre de propiedad que una propiedad en osombreará la opropiedad.
Por supuesto, cualquier propiedad agregada oestará disponible en objsi no está sombreada, y todos los objetos que tengan oen la cadena de prototipos verán las mismas actualizaciones o.
También si obj tiene una propiedad que hace referencia a otro objeto, como un Array, deberá asegurarse de sombrear ese objeto antes de agregar miembros al objeto; de lo contrario, esos miembros se agregarán objy se compartirán entre todos los objetos que tener objen la cadena de prototipos.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
Aquí puede ver eso porque no siguió la matriz en bazelo con una bazpropiedad de objla o.bazmatriz es modificado.
Entonces, en cambio, necesitarías sombrearlo primero:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined