Home [Javascript] 자바스크립트 객체, 프로토타입
Post
Cancel

[Javascript] 자바스크립트 객체, 프로토타입

기본 문법

생성

1
2
3
4
5
6
7
var person = {
    name: 'Soyeon',
    age: 24,
    sayHi: function() {
        alert("Hi, I\'m " + this.name);
    }
};
  • 객체 : 데이터와 함수의 집합 person
  • 프로퍼티(속성) : 객체 내부의 속성 name, age
  • 메소드 : 객체 내부의 함수 sayHi
  • 객체 리터럴(object literal) : 생성자로 생성하지 않고, 내용을 그대로 대입해서 생성한 객체

접근 & 설정

  1. 점 표기법
  2. 괄호 표기법
1
2
3
4
5
6
7
// 접근
person.age
person['age']

// 설정 (새로운 멤버 생성 가능)
person.age = 28;
person['hometown'] = 'Inchoen';

this

실행 중인 코드가 속해있는 객체

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var person1 = {
    name: 'Soyeon',
    sayHi: function() {
        alert("Hi, I\'m " + this.name);
    }
}
var person2 = {
    name: 'Joy',
    sayHi: function() {
        alert("Hi, I\'m " + this.name);
    }
}

person1.sayHi();	// Hi, I'm Soyeon
person2.sayHi();	// Hi, I'm Joy

객체지향 프로그래밍

생성자

1
2
3
4
5
6
7
8
9
10
// 생성
function Person(name) {
    this.name = name;
    this.sayHi = function() {
        alert("Hi, I'm " + this.name);
    };
}
// 호출
var person1 = new Person("Soyeon");
var person2 = new Person("Joy");
  • 생성자 : 프로퍼티와 메소드를 정의 Person
  • 객체 인스턴스 : 생성자로 생성된 각각의 객체 person1, person2

생성

  • this 키워드 사용
  • 생성자 함수명은 보통 대문자로 시작

호출

  • new 키워드 사용

Object() 생성자

  • 빈 객체를 생성하는 함수
  • 프로퍼티와 메소드를 정의해서 생성하려면 객체 리터럴 사용
1
2
3
4
5
6
7
var person1 = new Object();
var person2 = new Object({
    name: 'Soyeon',
    sayHi: function() {
        alert("Hi, I\'m " + this.name);
    }
})

create() 함수

  • 이미 존재하는 객체를 이용하여 새로운 객체를 생성하는 함수
  • 익스플로러 8에서는 지원하지 않는다.
1
2
3
4
var person1 = Object.create(person2);

person1.name		// Soyeon
person2.sayHi()		// Hi, I'm Soyeon

프로토타입 (prototype)

  • 객체는 상속받은 멤버를 접근할 때 프로토타입 체인을 타고 올라가며 찾는다. (복사되는 것이 아님)

프로토타입 속성

  • 상속하고자 하는 속성과 메소드를 담아두는 하나의 객체
1
2
3
4
5
6
// Person을 상속받은 객체에서 사용 가능한 속성과 메소드들을 확인
Person.prototype

// 프로토타입 객체 접근
var person1 = Object.create(person2);
person1.__proto__						// person2	

생성자 속성 (constructor)

  • 객체에서 자신을 만든 생성자를 호출하고자 할 때 사용하는 속성
1
2
3
4
person1.constructor						// Person()

// constructor를 이용하여 새로운 객체 생성
var person3 = new person1.constructor('Soyeon');

프로토타입 수정

1
2
Person.prototype.fullName = this.name.first + ' ' + this.name.last;
Person.prototype.callMyName = function() { ... };

속성을 생성자 밖에서 정의할 때 상수를 넣어줄 경우, 객체를 생성할 때마다 같은 값이 되어 좋은 방법이 아니고, this 를 이용할 경우, 함수 범위가 아닌 전역 범위를 가리키므로 의도대로 동작하지 않는다.

  • 그러므로, 보통 속성은 생성자에서 메소드는 프로토타입에서 정의한다.

출처 📎

Mozilla

This post is licensed under CC BY 4.0 by the author.