Pas vraiment.
Selon ce dont vous avez réellement besoin, une possibilité peut être de définir ocomme prototype d'un nouvel objet.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
Ainsi, toutes les propriétés que vous ajoutez objne seront pas ajoutées o. Toutes les propriétés ajoutées objavec le même nom de propriété qu'une propriété dans ol'ombre de la opropriété.
Bien sûr, toutes les propriétés ajoutées à oseront disponibles à partir de objsi elles ne sont pas masquées, et tous les objets qui ont odans la chaîne de prototypes verront les mêmes mises à jour de o.
De plus, si obja une propriété qui fait référence à un autre objet, comme un tableau, vous devez vous assurer de faire de l'ombre à cet objet avant d'ajouter des membres à l'objet, sinon, ces membres seront ajoutés objet partagés entre tous les objets ont objdans la chaîne de prototypes.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
Ici , vous pouvez voir que parce que vous ne l' avez pas l' ombre du tableau à bazsur oune bazpropriété sur objle o.baztableau se modifie.
Donc, à la place, vous devez d'abord l'observer:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined