Nie całkiem.
W zależności od tego, czego faktycznie potrzebujesz, jedną z możliwości może być ustawienie ojako prototyp nowego obiektu.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo );
Więc żadne właściwości, do których dodasz obj, nie zostaną dodane o. Wszelkie właściwości dodane do właściwości objo tej samej nazwie, co właściwość w programie, obędą cieniały owłaściwość.
Oczywiście wszelkie właściwości dodane do obędą dostępne z poziomu, objjeśli nie są zasłonięte, a wszystkie obiekty, które mają ow łańcuchu prototypów, zobaczą te same aktualizacje o.
Ponadto, jeśli objma właściwość odwołującą się do innego obiektu, takiego jak Array, musisz upewnić się, że obiekt ten jest cieniowany przed dodaniem elementów do obiektu, w przeciwnym razie te elementy zostaną dodane obji będą współdzielone przez wszystkie obiekty, które mają objw łańcuchu prototypów.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] );
Tutaj możesz zobaczyć, że ponieważ nie przesłałeś Array at bazon oz bazwłaściwością włączoną obj, o.bazArray zostanie zmodyfikowany.
Zamiast tego musisz najpierw go prześledzić:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] );