Repository navigation
Understanding the difference between Object.create() and the new operator.
그 차이를 아는 것이 왜 중요한가요?
- 최근의 자바스크립트가 아닌 코드를 실행합니다.
- 훌륭한 개발자가 되려면 모든 유형의 코드를 다루는 방법을 배워야합니다. 그것은 오래된 코드를 포함합니다!
- 후드 아래에서 ECMAScript 6에 도입 된 class 키워드는
new연산자를 사용합니다.
먼저 Object.create가 수행하는 작업을 살펴 보겠습니다.
var dog = {
eat: function() {
console.log(this.eatFood)
}
};
var maddie = Object.create(dog);
console.log(dog.isPrototypeOf(maddie)); //true
maddie.eatFood = 'NomNomNom';
maddie.eat(); //NomNomNom위의 예제를 단계별로 살펴보고 정확히 무엇이 일어나는지 봅시다.
-
eat이라는 하나의 메소드를 가진dog라는 이름의 객체 리터럴을 만듭니다. - 프로토타입을
dog로 설정해 완전히 새로운 객체를 생성하는Object.create(dog)를 사용하여maddie를 초기화합니다. -
dog가maddie의 프로토타입인지 테스트 해보십시오. -
this.eatFood를 통해 출력 할 문자열을 설정하십시오. - 새로 생성 된 객체
maddie를 사용하여eat함수를 호출하십시오. - 자바스크립트는 프로토타입 체인을 통과하여
this키워드가maddie로 설정된dog에eat메소드를 찾습니다. - NomNomNom을 콘솔에 출력합니다.
Object.create()는 프로토타입이 dog로 설정된 완전히 새로운 객체인 maddie를 만들었습니다. 새롭게 생성 된 maddie객체는 이제dog의eat 메소드에 접근 할 수 있습니다.
이제 new 연산자를 살펴 보겠습니다.
var Dog = function(){
this.eatFood = 'NomNomNom';
this.eat = function(){
console.log(this.eatFood)
}
};
var maddie = new(Dog);
console.log(maddie instanceof Dog); // True
maddie.eat(); //NomNomNomnew 연산자가 이 함수에 어떻게 적용되는지, 그리고 무엇을하는지 봅시다.
-
maddie라는 새 객체를 만듭니다. -
maddie는 생성자 함수의 프로토타입을 상속받습니다. - 1번에서 생성 된 object에
this가 설정된 생성자를 실행합니다. - 생성 된 객체를 반환합니다 (생성자가 객체를 반환하지 않을 동안).
Object.create ()와 new연산자의 차이점은 무엇일까요? 그들은 둘 다 똑같은 것을하는 것처럼 보입니다.
둘 다 새로운 객체를 만들고 프로토 타입을 상속받습니다.
바라건대. 이 예제는 혼란을 해결할 수 있습니다 :
function Dog(){
this.pupper = 'Pupper';
};
Dog.prototype.pupperino = 'Pups.';
var maddie = new Dog();
var buddy = Object.create(Dog.prototype);
//Using Object.create()
console.log(buddy.pupper); //Output is undefined
console.log(buddy.pupperino); //Output is Pups.
//Using New Keyword
console.log(maddie.pupper); //Output is Pupper
console.log(maddie.pupperino); //Output is Pups.이 예제에서 주목할 핵심 사항은 다음과 같습니다.
console.log(buddy.pupper); //Output is undefinedbuddy.pupper의 결과는 정의되지 않았습니다. Object.create()가 prototype을 Dog로 설정하더라도 buddy는 생성자에서 this.pupper에 액세스 할 수 없습니다.
이는 new Dog가 실제로 생성자 코드를 실행하는 반면 Object.create는 생성자 코드를 실행하지 않는 중요한 차이 때문입니다.
Object.create()와 new 연산자가 어떻게 서로 구별되는지에 대한 통찰력을 얻게 되었기를 바랍니다.
일부 의역이 들어간 경우도 있으므로 해당 원문의 내용과 조금 다를 수 있습니다.
문제가 될 소지가 있다거나 혹은 수정이 필요한 사항이 있다면 있다면 issues 보내주세요.
기술문서
- 호출스택
- 원시자료형
- 값타입과 참조타입
- 명시적 변환, 암시적 변환, Nominal, 구조화, 덕 타이핑
- == vs === vs typeof
- 함수 범위, 블록 범위, 렉시컬(lexical) 범위
- 식(expression) vs 문(statement)
- IIFF, Modules, Namespaces
- 메세지큐와 이벤트루프
- setTimeout, setInterval, requestAnimationFrame
- 자바스크립트 엔진
- 비트 연산자, 형식화 배열, 버퍼(배열)
- DOM과 Layout Trees
- 팩토리와 클래스
- this, call, apply, bind
- new, 생성자, instanceof, 인스턴스
- 프로토타입의 상속과 체인
- Object.create와 Object.assign
- map, reduce, filter
- 순수함수, 부수효과, 상태변이
- Closure
- 고차함수
- 재귀
- 컬렉션과 생성기
- Promise
- async, await
- 자료구조
- 함수 성능과 빅 오 표기법
- 알고리즘
- 상속, 다형성, 코드의 재사용성
- 설계패턴
- 부분 어플리케이션, 커링, Compose, Pipe
- 클린코드