MDN 문서과 같이, 초기화 후 클래스에 어떤 변화를 방지하여 불변 클래스를 만들기위한 솔루션으로 Object.freeze()
:불변의 경우 Object.defineProperty와 Object.freeze를 사용하는 것의 차이점은 무엇입니까?
class ExampleA {
constructor(x) {
this.x = x;
Object.freeze(this);
}
}
그러나, 내가 본 다른 사람들과 같이 Object.defineProperty()
를 사용하면 동일한 결과를 얻을 : 두 가지가 같은 일을 달성처럼 언뜻
class ExampleB {
constructor(x) {
Object.defineProperty(this, "x", {value: x});
}
}
는, 그 내가 this.x
는 불변하려는되고 있습니다 보인다. 게다가 Object.defineProperty()
을 사용하면 Object.freeze()
처럼 모든 것을 불변으로 만드는 대신 불변으로 만들 속성을 선택할 수 있습니다.
그래서 저는 변함없는 성취라는 측면에서 선호되는 방법은 무엇입니까? 이상으로 Object.defineProperty()
을 사용하여 놓친 부작용이 있습니까?
글쎄, 가장 명백한 것은 Object.defineProperty()를 사용하면 Object.freeze()와 같이 모든 것을 불변으로 만들지 않고 불변으로 만들 속성을 선택할 수 있다는 것입니다. " 또한'Object.defineProperty()'는 유용 할 수있는 다른 것들을 할 수 있습니다. (그런데, 그 속성이 다른 객체를 참조하는 경우에도 객체를 고정시킨 후에도 그 객체는 고정되어 있지 않으면 변경 될 수 있음을 이해합니다.) – nnnnnn