JavaScript에서 개체의 확장 가능 속성은 새 속성을 개체에 동적으로 추가할 수 있는지 여부를 나타내는 데 사용됩니다. ECMAScript 3 표준에서는 모든 객체가 확장 가능합니다. ECMAScript 5 표준에서는 모든 객체가 기본적으로 여전히 확장 가능하지만 이 속성을 설정하여 변경할 수 있습니다.
객체의 확장 가능 여부를 쿼리하려면 Object.isExtensible() 문을 사용할 수 있습니다.
객체를 확장 불가능하게 만들려면 Object.preventExtensions() 문을 사용할 수 있습니다:
Object.preventExtensions()에는 역연산문이 없기 때문에 일단 객체를 확장 불가능으로 설정하면 다시 확장 가능으로 설정할 방법이 없다는 점에 유의할 필요가 있습니다.
Object.preventExtensions() 문의 범위는 객체 자체이며 프로토타입 객체는 영향을 받지 않습니다. 객체가 확장 불가능하도록 설정된 경우에도 속성은 해당 프로토타입 객체에 동적으로 추가될 수 있으며 동적으로 추가된 이러한 속성은 객체에서 계속 상속될 수 있습니다.
Object.seal() 및 Object.freeze()
Object.preventExtensions()는 새 속성이 객체에 동적으로 추가되는 것을 방지할 수 있습니다. 이 작업 외에도 JavaScript에는 개체를 보호하기 위한 더 엄격한 두 가지 작업인 Object.seal() 및 Object.freeze()가 있습니다.
Object.seal()의 기능은 Object.preventExtensions()를 기반으로 모든 객체의 고유 속성 중 구성 가능한 속성을 false로 설정하는 것입니다. Object.preventExtensions() 작업과 마찬가지로 Object.seal()에는 반대 작업이 없으므로 객체가 봉인되면 해당 상태를 복원할 수 없습니다. JavaScript에서는 Object.isSealed()를 사용하여 객체가 봉인되었는지 쿼리할 수 있습니다.
Object.freeze()의 기능은 Object.seal()을 기반으로 모든 객체 자체의 속성을 읽기 전용으로 설정하는 것입니다. Object.seal() 및 Object.preventExtensions() 작업과 마찬가지로 Object.freeze()에는 역방향 작업이 없으므로 객체가 고정되면 해당 상태를 복원할 수 없습니다. JavaScript에서는 Object.isFrozen()을 사용하여 객체가 고정되었는지 여부를 쿼리할 수 있습니다.
Object.preventExtensions(), Object.seal() 및 Object.freeze()이든 해당 범위는 객체 자체이며 객체의 프로토타입 객체는 영향을 받지 않습니다.