본문 바로가기
프로그래밍 언어/JS

Javascript) 객체와 함수, 프로토 타입 프로그래밍

by nomfang 2021. 4. 29.
728x90
반응형

자바스크립트는 프로토타입 프로그래밍 언어이다

    -> class less 프로그래밍, instance 프로그래밍으로도 불린다
    -> 객체 지향의 class와 상속 개념과 유사함

 

자바스크립트에서는 함수도 객체이다

 

함수 선언 시 함수 객체와 프로토 타입 객체가 생성되고, 생성자(constuctor)를 부여 받는다
constructor는 프로토 타입 객체 안에 __proto__와 함께 생성됨

함수 객체에는 prototype이 생성됨

    -> _proto_ 는 모든 객체가 가지고 있고,
    prototype은 함수 객체만 가지고 있다

 

prototype은 프로토 타입 객체를 참조하고,
\constructor는 함수 객체를 참조,
__proto__는 함수 객체의 원형을 참조한다

 

객체와 객체 사이의 참조하는 속성들을 레퍼런스 변수라고 하며 동적으로 추가된 것도 참조할 수 있음

 

__proto__는 프로토 타입 링크 라고 불리고, 모든 객체에 존재하는 레퍼런스 변수
상위 __proto__링크를 접속 할 수 있음 ( 프로토 링크 체인 이라고 부른다)

 

함수 자료형에서만 프로토 타입 객체 생성 가능
    -> 다른 자료형에서는 프로토 타입 객체 생성 불가 (익명 함수도 불가능)

// 함수 자료형 선언
const Car = function(){
    console.log('자동차');
}

// 함수 자료형은 constructor가 있기 때문에 new 연산자로 객체 생성 가능

const avante = new Car; // new연산자로 객체 생성

프로토 타입 객체

function에서 prototype의 값을 사용할 수 있다

function내에 값이 없으면 prototype의 값을 찾는?

function은 프로토타입의 값을 참조한다

-> proto의 값을 변경하면 프로토타입을 참조하는 모든 하위 객체가 참조하는 프로토 타입의 값이 변경됨

함수 생성 시 prototype link와 prototype Object가 함께 생성됨

prototype link : prototype

prototype Object : constructor, constructor내의 __proto__

prototype은 ptrototype Object를 참조

constructor의 __proto__는 prototype link 참조 ->

console.dir()로 내용 확인 가능

함수로 생성되면 prototype이

객체로 생성되면 그 자체로 객체이기 때문에 prototype이 존재하지 않음

익명 함수는 proto type이 같이 생성되지 않는다

모든 객체는 __proto__ 를 가지고있다

객체의 값을 출력할 때 모든 상위의 __proto__를 확인하고

없으면 undifined,

있으면 가장 가까운 __proto__의 값을 가져옴

hasWonProperty() 로 프로퍼티가 있는지 확인 가능

반응형

댓글