일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- #TIL #Today I Learned #기록 #회고 #ternary statement #swich statement #스위치 반복문 #
- 기록 #회고
- 강의 #느낀점 #snowfox #스노우폭스 #김승호회장
- 불리언 #Boolean #number #string #symbol #null #undefined
- javascript #event #onclick #js
- TIL #Today I Learned #
- 웹페이지제작 #
- single source of truth란 #single source of truth #자료의중복 #자료의비정합성 #비정합성 #리팩토링
- TIL #Today I Learned # 기록 # 회고 #Udemy
- 고스트 블로그 #
- Hackerrank #해커랭크 #python #파이썬 #알고리즘 #Algorithm
- 블로그만들기 #웹사이트만들기 #
- hackerrank #python #algorithm #해커랭크 #파이썬 #알고리즘
- 블로그 셀프제작
- javascript '===' #javascript #TIL #Today I Learned #기록 #회고
- 자바스크립트 #javascript #datatype #데이터타입 #자료형
- javascript #statement #expression #difference
- Today
- Total
well-balanced
[TIL] 기록 54일차 본문
Today I Learned
-
JavaScript의 Class에 대해 공부했다.
ES5 이전 버전에서는 Class 대신 사용자 정의 타입 생성이라는 개념의 방법이 있었다.
PersonType(name) {
this.name = name;
}
PersonType.prototype.sayName = function() {
console.log(this.name)
}
let person = new PersonType('Woody');
person.sayName() // Woody
Class 선언은 class 키워드와 이름으로 시작한다.
class PersonClass {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
let person = new PersonClass('Woody')
person.sayName() // Woody
PersonClass 클래스 선언은 이전에 함수를 생성자로 정의하는 대신 constructor 메소드를 사용하여 클래스 내부에 직접 생성자를 정의할 수 있다. 클래스 메소드는 간결한 구문을 사용하기 때문에 위에서 보는 것과 같이 sayName이라는 메소드를 정의할 때 따로 function 키워드를 사용할 필요가 없다.
-
가능한 모든 property는 생성자 함수 내에서 만드는 것이 좋다. 그 이유는 클래스으 한 장소에서 모든 property가 표현되기 때문
-
클래스 선언은 실제로 contructor 메소드의 동작을 갖는 함수를 생성한다. 이것이 typeof로 PersonClass를 찍어봤을 때 function을 리턴해주는 이유이다.
클래스와 사용자 정의 타입의 유의해야할 차이점이 몇 가지가 있다.
- 클래스 선언은 함수 선언과 달리 Hosting 되지 않는다.
- 클래스 선언의 모든 코드는 strict 모드로 자동 실행된다. strict 모드를 거부할 수 있는 방법은 없다.
strict 모드는 기존 자바스크립트에서 묵인했던 에러들의 에러 메세지를 발생시킴. 엄격한 문법 검사.
- 선언없이 전역변수를 만들 수 없다.
- read only 객체의 수정이 불가능하다.
- arguments 를 변수 또는 함수, 매개 변수의 이름으로 사용할 수 없다.
이외에도 정확한 문법체크를 위해 많은 에러를 발생시킴.
- 모든 메소드는 Non-Enumerable이다. Object.defineProperty() 를 사용하여 메소드를 Non-Enumerable하게 만드는 사용자 정의 타입과 다른 중요한 변경 사항이다.
* Enumerable의 뜻을 찾아보니 '열거, 혹은 셈이 가능한' 이라는 의미를 지니고 있다.
- 모든 메소드는 내부 [[Constructor]] 메소드가 없으며, new로 호출하려고 하면 에러가 발생
- new를 사용하지 않고, 클래스 생성자를 호출하면 오류가 발생한다.
- 클래스 메소드 내에서 클래스 이름을 덮어 쓰려고 하면 오류가 발생한다.
일급 시민으로서의 클래스. 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가르킨다. 그 연산에는 함수에 파라미터로 넘기기, 변수에 대입하기와 같은 연산들을 말한다.
function createObject(classDef) {
return new classDef();
}
let obj = createObject(class {
sayHi() {
console.log('Hi!')
}
});
obj.sayHi();
클래스 표현식의 또 다른 흥미로운 사용법은 클래스 생성자를 즉시 호출하여 싱글톤을 생성하는 것이다. 이렇게 하려면 클래스 표현식에 new를 사용해야하고, 마지막에 괄호를 포함해야한다.
let person = new class {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}('Wodoy')
person.sayName()
출처 : https://infoscis.github.io/2018/02/13/ecmascript-6-introducing-javascript-classes/
'TIL : study log' 카테고리의 다른 글
[TIL] 기록 56일차 (0) | 2019.12.26 |
---|---|
[TIL] 기록 55일차 (0) | 2019.12.24 |
[TIL] 기록 53일차 (0) | 2019.12.23 |
[TIL] 기록 52일차 (0) | 2019.12.22 |
[TIL] 기록 51일차 (0) | 2019.12.22 |