object(객체)를 만드는 기계, 복사기계라고 생각하면 됨
비슷한 object를 많이 만들어야 할 때 class 사용
[object(객체)에 데이터를 추가하는 법]
function 기계(){
this.role = “consume”;
this.name = “snowball”;
}
얘는 중괄호 안에 this가 존재하는 이상 함수가 아니다.
클래스 역할을 대신할 수 있다.
construnctor라고도 함.
여기에서 THIS는 기계로부터 새로 생성되는 object(객체)들 = 인스턴스!
따라서 this.role = ‘consume’은 새로 생성되는 object에 {role:’consume’}을 추가해주세요 라는 말이다.
그 다음에
new 기계() 라고 선언하면 이 자리에는 object 데이터가 남게 됨
var nn = new 기계();
===
var nn = {
role : ‘consume’,
name: ‘snowball’
}
과 같음.
4줄짜리를 1줄로 줄여쓸 수 있다는 게 장점 var nn = new 기계();
var aa = new 기계();
하면 또 (객체 데이터가 똑같이 들어가 있는)객체가 생성되는 거임 = 인스턴스
객체를 100개 만들고 싶을 때 쓰면 된다
근데 지금 객체 값이 똑같잖아 이러면 안됨, 기계 업그레이드를 해야함
function 기계(인수){
this.role = 인수;
this.name = “snowball”;
}
var nn = new 기계(’consume’);
기계란 함수를 인수 자리에 consume 넣어서 실행시켜 주세요
var aa = new 기계(’sell’)
ES6문법으로 바꾸면
class Machine { //클래스 작성할 때 첫글자 대문자
constructor(인수){
this.role = 인수;
this.name = “snowball”;
}
}
new Machine(); // 선언하면 오브젝트 자료가 생성됨
var n = new Machine() 이렇게 변수에 담아서 쓰면 됨
n을 출력하면
{role : ‘consume’,
name : ‘snowball’}
클래스 Machine을 부모라고 생각하고 var n을 자식으로 생각하면
클래스가 자식n에게 유전자 role과 name을 물려줬다 .
Machine을 출력하면
class Machine{
constructor(e){
this.role = e;
this.name = ‘snowball’
}
}
이 나오는데
Machine과 함께 생성되는 비밀공간이 있다.
Machine.prototype
프로토타입을 써서 자식 object에게 데이터를 물려줄 수 있다
Machine.prototype : Machine 클래스의 유전자
프로토타입도 객체 자료 형태이기 때문에
Machine.prototype.age = ‘18’
이런식으로 기계 유전자에 새로운 데이터를 추가할 수 있다.
n을 출력하면 여전히
{
role : ‘consume’,
name:’snowball’
}
이 나오지만
n.age를 출력하면 ‘18’이 나옴
부모 유전자에 기록이 되어 있기 때문에..
클래스에 직접 추가하면 자식이 직접 가짐
프로토타입(유전자)에 추가를 하면 자식이 직접 가지지는 않지만 끌어다 쓸 수 있게됨
n.age로
자식이 부모유전자를 가지고 올 수 있는 이유!
프로토타입 체인
직접 자료를 가지고 있으면 그거 출력
없으면 부모유전자 뒤집
또 없으면 부모의 부모유전자까지 뒤짐
부모 없을 때까지 계속함
ex(
var 어레이 = [4, 2, 1];
어레이.sort();
정렬됨
이렇게 변수에 붙일 수 있는 기본 내장 함수 = 메서드
var 어레이 = new Array(4,2,1)
이렇게도 쓸 수가 있는데
new 키워드는 오른쪽에 기계로부터 자식을 뽑아준다 = 뽑은 자식이 인스턴스
Array라는 기계가 있는데 거기에서 자식을 만들어서 어레이라는 변수에 담은 거
*new Object() 객체 자료형 자식을 만드는 기계
어레이.sort()
어레이.length()
어레이.filter()
어레이.map()
부모유전자에 들어있으니까 가져다 쓸 수 있는 거임
Array라는 부모는 프로토타입에 sort함수와 length 함수를 가지고 있으니까
Array.prototype
쳐보면 유전자로 뭘 가지고 있는지 나옴
기계의 프로토타입에 정의된 함수
내가 프로토타입에 함수를 넣을 수도 있다
Machine.prototype.age = ‘18’ 이것처럼
Array.prototype.원소삭제하는함수 = function(){
console.log('ddd')
}
똑같이 함수 이름 쓰고 선언하면 됨
어레이.함수();
실행하면 콘솔 찍힘