Nicht wirklich.
Je nachdem, was Sie tatsächlich benötigen, besteht eine Möglichkeit darin, oden Prototyp eines neuen Objekts festzulegen.
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
Eigenschaften, die Sie hinzufügen, objwerden also nicht hinzugefügt o. Alle Eigenschaften, die objmit demselben Eigenschaftsnamen wie eine Eigenschaft in hinzugefügt wurden, oschattieren dieo Eigenschaft.
Natürlich sind alle hinzugefügten Eigenschaften overfügbar, objwenn sie nicht schattiert sind, und alle Objekte oin der Prototypenkette werden mit denselben Aktualisierungen verseheno .
Wenn objeine Eigenschaft vorhanden ist, die auf ein anderes Objekt verweist, z. B. ein Array, müssen Sie sicherstellen, dass Sie dieses Objekt schattieren, bevor Sie dem Objekt Elemente hinzufügen. Andernfalls werden diese Elemente hinzugefügt objund von allen Objekten gemeinsam genutzt, die dies tun haben objin der Prototypkette.
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
Hier können Sie sehen , dass , weil Sie nicht das Array an Schatten haben bazauf omit einer bazEigenschaft auf obj, dieo.baz wird Array geändert.
Stattdessen müssen Sie es zuerst beschatten:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined