Non proprio.
A seconda di ciò di cui hai effettivamente bisogno, una possibilità potrebbe essere quella di impostare ocome prototipo di un nuovo oggetto.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
Pertanto, tutte le proprietà a cui aggiungi objnon verranno aggiunte o. Qualsiasi proprietà aggiunta a objcon lo stesso nome di proprietà di una proprietà in oombreggerà la oproprietà.
Ovviamente, tutte le proprietà aggiunte osaranno disponibili objse non sono ombreggiate e tutti gli oggetti che hanno onella catena del prototipo vedranno gli stessi aggiornamenti a o.
Inoltre, se objha una proprietà che fa riferimento a un altro oggetto, come un Array, dovrai assicurarti di ombreggiare quell'oggetto prima di aggiungere membri all'oggetto, altrimenti quei membri verranno aggiunti obje saranno condivisi tra tutti gli oggetti che avere objnella catena dei prototipi.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
Qui puoi vedere che poiché non hai ombreggiato l'Array bazsu ocon una bazproprietà attiva obj, l' o.bazArray viene modificato.
Quindi, invece, dovresti prima ombreggiarlo:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined