객체지향 - 생성자와 new 그리고 전역객체

객체 란? 서로 연관된 변수와 함수를 그룹핑한 그릇이라고 할 수 있음.
프로퍼티 (property) : 객체 내의 변수
메소드(method) : 객체 내의 함수

let person = {}
person.name = 'rkhong';
person.introduce = function() {
	return 'My name is' + this.name;
}
console.log(person.introduce());		//My name is rkhong

// 객체를 정의할 때 값을 셋팅하도록 코드 변경
let person = {
	'name' : 'rkhong',
    'introuduce' : function() {
    	return 'My name is' + this.name;
    }
}
console.log(person.introduce());		//My name is rkhong

생성자

  • 객체의 정의를 반복해야 할 경우 객체의 구조를 재활용할 수 있는 방법
  • 객체를 만드는 역할을 하는 함수
    자바스크립트에서 함수는 재사용 가능한 로직의 묶음이 아닌 객체를 만드는 창조자
// new를 붙이면 새로운 객체를 만든 후 이를 리턴함. 
// (** 별로 개선된 것이 없음)
function Preson() {
	let p1 = new Person();
    p1.name = 'rkhong';
    p1.introduce = function() {
    	return 'My name is' + this.name;
    }
    console.log(p1.introduce());		//My name is rkhong
    
    let p2 = new Person();
    p2.name = 'rk';
    p2.introduce = function() {
    	return 'My name is' + this.name;
    }
    console.log(p2.introduce());		//My name is rk
}

// 생성자 내에서 이 객체의 프로퍼티를 정의하고 있음. => 초기화 -> 코드의 재사용성이 높아짐.
// 생성자 함수는 일반함수와 구분하기 위해 첫글자를 대문자로 표시
function Person(name) {
	this.name = name;
    this.introduce = function() {
    	return 'My name is' + this.name;
    }
}
let p1 = new Person('rkhong');
console.log(p1.introduce());			//My name is rkhong

let p2 = new Person('rk;);
console.log(p2.introduce());			//My name is rk

자바스크립트의 생성자의 특징

  • 일반적인 객체지향 언어에서 생성자는 클래스의 소속이지만 자바스크립트에서 객체를 만드는 주체는 함수임.
  • 함수에 new를 붙이는 것은 객체를 만들 수 있다는 점에서 자바스크립트에서 함수의 위상을 암시하며 자바스크립트가 추구하는 자유로움을 보여주는 사례임.

전역객체

전역객체(Global object) : 특수한 객체
모든 객체는 이 전역객체의 프로퍼티임

// func()와 window.func() 모두 실행이 됨.
// 모든 전역변수와 함수는 사실 window 객체의 프로퍼티임. -> 객체를 명시하지 않으면 암시적으로 window의 프로퍼티로 간주함.
function func(){
	alert('Hey');
}
func();
window.func();

//자바스크립트에서 모든 객체는 기본적으로 전역객체의 프로퍼티임을 알 수 있음
let a = {'func':function (){
	alert('Hey');
}}
a.func();
window.a.func():

전역객체 API

  • ECMAScript에서는 전역객체의 API를 정의해둠. (그 외의 API의 경우 호스트 환경에서 필요에 따라 추가로 정의하고 있음)
    ex) 웹브라우저 자바스크립트에서는 alert()이라는 전역객체의 메소드가 존재하나, node.js에서는 존재하지 않음.
  • 전역객체의 이름도 호스트환경에 따라서 다름
    ex) 웹브라우저에서 전역객체 -> window / node.js에서 전역객체 -> global

.
.
.
.
Reference

https://opentutorials.org/course/743/6570
https://opentutorials.org/course/743/6577

좋은 웹페이지 즐겨찾기