Object.create(proto[, propertiesObject]) 메서드는 주어진 프로토타입 객체(proto)를 사용하여 새로운 객체를 생성한다.
즉, 새로 생성된 객체는 'proto'객체를 상속받는다. 이 메서드는 객체 생성 및 상속을 명시적으로 처리하는데 사용된다.
문법
Object.create(proto[, propertiesObject])
- proto : 새로 생성된 객체가 상속받을 프로토타입 객체
- propertiesObject(선택사항) : 새로 생성돈 객체에 추가될 속성 및 속성 디르크립터를 지정하는 객체
// 부모 객체 생성
const parent = {
greet: function() {
console.log('Hello!');
}
};
// 자식 객체 생성 및 부모 객체 상속
const child = Object.create(parent);
// 자식 객체에서 부모의 메서드 호출
child.greet(); // 출력: Hello!
위의 예시에서 child객체는 Object.create(parent)를 통해서 생성되었고 이로 인해 child객체는 parent객체를 상속받게 된다 따라서 child객체에서 greet메서드를 호출할 수 있다.
Object.create(Parent.prototype) 방식과 new Parent();의 차이
Child.prototype = new Parent(); 이런 방식은 예전에 많이 사용되었던 방식이지만 현재는 몇 가지 문제점이 있어 주로
Object.create()방식을 사용하는 추세다.
Child.prototype = Object.create(Parent.prototype);
Child.prototype = new Parent();
new Parent() 방식의 문제점
1. 부모 생성자 함수에 인자를 전달 할 수 없다 : new Parent()를 사용하면서 부모 생성자 함수에 인자를 전달하는 것이 어렵다. Parent.call(this,...) call을 사용하거나 하지 않으면 부모의 생성자 함수에 필요한 초기화가 이루어지지 않는다.
2. 인스턴스 생성 자원소모가 더 높다 : 부모 생성자 함수가 호출되어 새로운 인스턴스를 생성하는데 자원소모가 더 크다.
Object.create()는 단순히 프로토타입 체인을 설정하는데 필요한 새로운 객체만 생성하기 때문에 더 효율적이다.
3. 부모 생성자 함수가 부수 효과를 일으킬 수 있다. : new Parent()를 사용하면 부모 생성자 함수 내에서 다양한 동작이 일어날 수 있다. 따라서 예상 못한 부수 효과를 가져올 수도 있다. 그러나 Object.create()를 사용하면 부모 생성자 함수를 호출하지 않고도 프로토타입 체인을 설정할 수 있다.
이러한 이유들로 Object.create()를 사용하는 것이 권장되지만 코드가 간단하고 특별한 상황이 없다면 new를 사용하는 방식도 문제 없다.
'javaScript' 카테고리의 다른 글
클래스 상속 프로토 타입 vs Class 문법 (0) | 2024.01.01 |
---|---|
.call() 메서드 (0) | 2023.12.27 |
js에서 클래스 상속 (0) | 2023.12.19 |
캡슐화 자바스크립트에서 사용방법 (0) | 2023.12.11 |
접근 지정자(Access Modifiers) (0) | 2023.12.08 |
댓글