constructor , prototpye

Lee Dong Uk·2021년 5월 11일
0

constructor

OOP에서 class는 세부 사항(속성) 이 정의되지 않은 청사진(형태) 인데 여기서 세부 사항만 정의해준다면 객체가 된다. JS에서 사용하는 용어와 별개로 class를 통해 만들어진 객체를 특별히 인스턴스 객체, 줄여서 인스턴스라고 한다.

세부 사항은 어떻게 정의해줘야 할까?

이 역할을 하는 것이 생성자 이다.

생성자는 class 내에서 객체를 생성하고 초기화 시키는데, 이를 통하여 세부사항을 정의해 준다.

ES6 문법으로

class Student{
	constructor(){
    this.name = 'lee' // 하드코딩으로 name 을 'lee'로 초기화 시켰다.
    }
 }
 
 const lee = new Student() 
 //빈 () 는 생성자를 의미한다 
 //생성자의 parameter 설정에 따라 바뀔 수 있다.

생성자에 papamater가 들어가는 경우

class Student{
	constructor(name , age ){
    this.name = name 
    this.age = age
    }
 }
 
const son = new student('son',24.5)

Prototype

JS 의 모든 객체는 자신의 부모 역할을 담당하는 객체와 역할되어 있는데 JS 에서 이러한 부모 객체를 Prototype 객체 줄여서 Prototype이라 한다.
(JAVA 에서 Object 객체인듯)

이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 하는데 이를 Prototype chain 이라고 부르며 JS에서 다른 객체에 정의된 메소드와 속성을 한 객체에서 사용할 수 있도록 하는 근간이다.

//정확하게는 각 객체가 아니라 객체의 생성자의 prototype 이라는 속성에 정의되어 있다

  • JS 의 모든 객체는 [Prototype] 이라는 인터널 슬롯(internal slot)을 가진다.
  • [Prototype] 의 값은 null 혹은 객체인데 상속을 구현하는데 사용된다 .
  • [Prototype] 객체의 데이터 property 는 get 액세스를 위해 상속되어 자식 객체의 property처럼 사용할 수 있다.
  • 하지만 set 액세스는 허용되지 않는다 (read only)

//인터널 슬롯(internal slot) 에 대한 개념은
https://stackoverflow.com/questions/33075262/what-is-an-internal-slot-of-an-object-in-javascript
여기서...

const Student = {
  name: 'Lee',
  score: 90
}
console.log(Student.__proto__ === Object.prototype); // true

이렇게 객체를 생성할 때 프로토타입은 결정된다.
결정된 프로토타입 객체는 다른 임의의 객체로 변경할 수 있는데, 이것은 부모 객체인 프로토타입을 동적으로 변경할 수 있다는 것을 의미한다.
이러한 특징을 활용하여 객체의 상속을 구현할 수 있다.

프로토타입 객체의 확장

  • 프로토타입 객체도 객체이므로 일반 객체와 같이 property를 추가/삭제할 수 있다.
  • 이렇게 추가/삭제된 property는 즉시 프로토타입 체인에 반영된다
class Student{
	constructor(name , age ){
    this.name = name 
    this.age = age
    }
 }
 
const son = new Student('son',24.5)

Student.prototpye.ask = ()=>{
	console.log('외않되??')
}

son.ask()  //외않되

0개의 댓글