자바스크립트는 프로토타입 프로그래밍 언어이다
-> 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() 로 프로퍼티가 있는지 확인 가능
'프로그래밍 언어 > JS' 카테고리의 다른 글
JavaScript) 일급 객체와 고차 함수 (0) | 2022.03.15 |
---|---|
JavaScript) 런타임과 node.js (0) | 2022.03.07 |
Javascript) Node List, Arrow function (0) | 2021.04.13 |
Javascript) CSS의 속성 값 가져오기 (0) | 2021.04.12 |
Javascript) forEach() , 익명함수 (0) | 2021.04.12 |
댓글