ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] new 연산자
    개발자 이야기/JavaScript 2021. 7. 19. 11:18

    [MDN]

    사용자 정의 객체 타입 또는 객체 타입의 *인스턴스를 생성한다.

     

    *인스턴스란?

    [네이버 지식백과]

    같은 클래스에 속하는 개개의 객체로, 하나의 클래스에서 생성된 객체를 말한다.

    즉, 클래스가 구체화되어, 클래스에서 정의된 속성과 성질을 가진 실제적인 객체로 표현된 것을 의미한다.

    이때 추상적인 개념인 클래스를 실제 객체를 생성하는 것을 인스턴스화라고 한다.

     

    // 객체 타입 생성 (1)
    function Car(make, model, year) {
      this.make = make;
      this.model = model;
      this.year = year;
    }
    
    // new를 호출해서 언제든지 Car 객체의 인스턴스를 생성할 수 있다. (2)
    const car1 = new Car('Eagle', 'Talon TSi', 1993);  // car1으로 불리는 객체 생성
    
    console.log(car1.make);  // "Eagle"

    위 예제와 같이, 사용자 정의 객체를 생성하는 데 두 단계가 필요하다.

    • 함수를 작성하여 객체 타입을 정의한다. (1)
    • new 연산자로 객체의 인스턴스를 생성한다. (2)

     

    코드 new Car(...)가 실행될 때 다음과 같은 일이 발생한다.

    • Car.prototype을 상속하는 새로운 객체가 하나 생성된다.
    • 생성자 함수 Car가 호출된다. (new Car는 new Car()와 동일하다. 즉, 인자가 명시되지 않은 경우 인자 없이 Car가 호출된다.)
    • 생성자 함수에 의해 리턴된 객체는 전체 new 호출 결과가 된다.

     

    Function.prototype 속성을 사용하여 언제든지 이전에 정의된 객체 타입에 공유 속성을 추가할 수 있다. 이는 객체 타입의 인스턴스 하나에만 적용되는 것이 아닌 이 함수로 생성하는 모든 객체에 적용된다.

    function Car() {}
    car1 = new Car();
    car2 = new Car();
    
    console.log(car1.color);    // undefined
    
    Car.prototype.color = "original color";
    console.log(car1.color);    // original color
    
    car1.color = 'black';
    console.log(car1.color);   // black
    
    console.log(car1.__proto__.color) //original color
    console.log(car2.__proto__.color) //original color
    console.log(car1.color)  // black
    console.log(car2.color) // original color

     

    새로운 객체 생성 시 문자열이나 숫자 값을 넘겨주는 대신 특정 객체를 넘겨줄 수 있다.

    function Car(make, model, year, owner) {
      this.make = make;
      this.model = model;
      this.year = year;
      this.owner = owner;
    }
    
    var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
    var car2 = new Car("Nissan", "300ZX", 1992, ken);
    
    car2.owner.name

    댓글

Designed by Tistory.