Na verdade não.
Dependendo do que você realmente precisa, uma possibilidade pode ser definir ocomo o protótipo de um novo objeto.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
Portanto, quaisquer propriedades adicionadas objnão serão adicionadas o. Todas as propriedades adicionadas objcom o mesmo nome de propriedade de uma propriedade em oirão sombrear a opropriedade.
Obviamente, todas as propriedades adicionadas a oestarão disponíveis objse não estiverem sombreadas, e todos os objetos que estão ona cadeia de protótipos verão as mesmas atualizações em o.
Além disso, se objtem uma propriedade que faz referência a outro objeto, como um Array, você precisará ter certeza de sombrear esse objeto antes de adicionar membros ao objeto, caso contrário, esses membros serão adicionados obje serão compartilhados entre todos os objetos que tem objna cadeia de protótipos.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
Aqui você pode ver que porque você não sombra da matriz em bazon ocom uma bazpropriedade em obj, a o.bazmatriz é modificado.
Então, em vez disso, você precisa sombrear primeiro:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined