Przejdź do treści

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

Komentarze

Zobacz więcej komentarzy

Facebook