Na verdade não.
Dependendo do que você realmente precisa, uma possibilidade pode ser definir o
como 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 obj
não serão adicionadas o
. Todas as propriedades adicionadas obj
com o mesmo nome de propriedade de uma propriedade em o
irão sombrear a o
propriedade.
Obviamente, todas as propriedades adicionadas a o
estarão disponíveis obj
se não estiverem sombreadas, e todos os objetos que estão o
na cadeia de protótipos verão as mesmas atualizações em o
.
Além disso, se obj
tem 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 obj
e serão compartilhados entre todos os objetos que tem obj
na 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 baz
on o
com uma baz
propriedade em obj
, a o.baz
matriz é 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