본문 바로가기
javaScript

Object.create()

by mooyou 2023. 12. 25.
728x90
300x250

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를 사용하는 방식도 문제 없다.

728x90
반응형

'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

댓글