Object.preventExtensions()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

O método Object.preventExtensions() impede que novas propriedades sejam adicionadas a um objeto (isto é, impede futuras extensões ao objeto).

Syntax

Object.preventExtensions(obj) 

Parâmetros

obj

O objeto a tornar-se não-extensível.

Valor de retorno

Um objeto tornado não-extensível.

Descrição

Um objeto é extensível se novas propriedades puderem der adicionadas ao mesmo. Object.preventExtensions() marca um objeto como não mais extensível, de forma que este nunca terá novas propriedades além daquelas que o objeto tinha quando foi marcado como não-extensível. Note que as propriedades de um objeto não-extensível, em geral, ainda poderão ser apagadas. Tentativas de adicionar novas propriedades a um objeto não-extensível falharão, tanto silenciosamente ou lançando uma exceção TypeError (mais comumente, mas não exclusivamente, quando em strict mode).

Object.preventExtensions() evita apenas a adição de novas propriedades diretas. Proprieades ainda poderão ser adicionadas ao protótipo do objeto.

É impossível tornar um objeto extensível novamente uma vez que o mesmo tenha se tornado não-extensível.

Exemplos

js
// Object.preventExtensions retorna o objeto // tornado não-extensível. var obj = {}; var obj2 = Object.preventExtensions(obj); obj === obj2; // verdadeiro // Objetos são extensíveis por padrão... var empty = {}; Object.isExtensible(empty); // === verdadeiro // ...mas isso pode ser mudado. Object.preventExtensions(empty); Object.isExtensible(empty); // === falso // Object.defineProperty lança erro quando adiciona-se // uma nova propriedade a um objeto não-extensível. var nonExtensible = { removable: true }; Object.preventExtensions(nonExtensible); Object.defineProperty(nonExtensible, "new", { value: 8675309, }); // lança um TypeError // No modo restrito, tentar adicionar novas propriedades a // um objeto não-extensível lança um TypeError. function fail() { "use strict"; // lança um TypeError nonExtensible.newProperty = "FAIL"; } fail(); 

O protótipo não-extensível de um objeto é imutável:

js
var fixed = Object.preventExtensions({}); // lança um 'TypeError'. fixed.__proto__ = { oh: "hai" }; 

Notas

No ES5, se o argumento atribuído a este método não for um objeto (for um primitivo), isso causará um erro de tipo TypeError. No ES2015, um argumento não-objeto será tratado como se o mesmo fosse um objeto não-extensível comum, simplesmente retornando-o.

js
Object.preventExtensions(1); // TypeError: 1 não é um objeto (código ES5) Object.preventExtensions(1); // 1 (código ES2015) 

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-object.preventextensions

Compatibilidade com navegadores

Veja também