Blokowanie rozszerzania obiektu - preventExtensions
Co zrobić, aby zablokować możliwość rozszerzania struktury obiektu?
(interpretuje: Internet Explorer 9, Firefox 4, Opera 12, Chrome 6)
Object.freeze(O)
- Parametry:
Object
O - obiekt- Wartość:
- O - przekazany obiekt
- Wyjątki:
TypeError
- wartość O nie jest obiektem
Wywołanie tej funkcji na podanym obiekcie sprawia, że nie będzie można dla niego definiować więcej żadnych nowych deskryptorów właściwości ani dodawać żadnych nowych właściwości. Natomiast będzie można normalnie zmieniać wartości i deskryptory oraz usuwać właściwości, które obiekt posiadał już wcześniej. Mówimy, że obiekt przestał być rozszerzalny (ang. extensible), tzn. jego struktura nie może się rozszerzyć.
Przykład Object.preventExtensions
var obj = Object.defineProperty({p: 1}, "x", {value: 2, writable: false, configurable: true}); delete obj.p; obj.test; // undefined obj.test = 3; Object.preventExtensions(obj); obj.test; // 3 obj.test = 2; obj.test; // 2 delete obj.test; obj.test; // undefined obj.p = 1; obj.p; // undefined obj.x = 1; obj.x; // 2 Object.defineProperty(obj, "x", {writable: true}); obj.x = 1; obj.x; // 1 Object.defineProperty(obj, "p", {}); // TypeError Object.preventExtensions(true); // TypeError Object.preventExtensions(1); // TypeError Object.preventExtensions("test"); // TypeError Object.preventExtensions(null); // TypeError