ES6 스터디 정리 : Classes
class란
자바스크립트에서도 class 를 사용할 수 있다.
class 는 객체의 정의이다.
class User {
constructor (name){
this.userName = name;
}
sayHello(){
console.log(`Hello ${this.userName}`);
}
}
const user1 = new User("gildong");
const user2 = new User("younghee");
console.log(user1.userName);
user1.sayHello();
console.log(user2.userName);
user2.sayHello();
class 의 확장
extends 를 통해 class 를 상속받아 확장 할 수 있다.
class User {
constructor (name, lastName, email, password){
this.userName = name;
this.lastName = lastName;
this.email = email;
this.password = password;
}
sayHello(){
console.log(`Hello ${this.userName}`);
}
getProfile(){
console.log(`${this.username} ${this.lastName} ${this.email} ${this.password} `);
}
updatePassword(newPassword, currentPassword){
if(currentPassword === this.password){
this.password = newPassword;
console.log("update done.");
}
else{
console.log("check password.");
}
}
}
const user1 = new User("gildong", "hong", "[email protected]", "1234");
//User class 를 상속 받아 Admin class 를 정의하였다.
class Admin extends User{
deleteWebsite(){
console.log("deleted");
}
}
const admin = new Admin("admin", "king", "[email protected]", '1111');
admin.deleteWebsite();
super()란?
확장된 class 의 생성자 constructor() 내에서 부모 class 의 생성자를 호출하는 메소드이다.
부모 class 의 생성자를 호출하여 상속받은 속성도 초기화 할 수 있다.
class User {
constructor (options){
this.userName = options.name;
this.lastName = options.lastName;
this.email = options.email;
this.password = options.password;
}
sayHello(){
console.log(`Hello ${this.userName}`);
}
getProfile(){
console.log(`${this.username} ${this.lastName} ${this.email} ${this.password} `);
}
updatePassword(newPassword, currentPassword){
if(currentPassword === this.password){
this.password = newPassword;
console.log("update done.");
}
else{
console.log("check password.");
}
}
}
class Admin extends User{
constructor({userName, lastName, email, password, superAdmin, isActive}){
super({userName, lastName, email, password});
//super 를 호출하여 부모 class 의 생성자를 호출한다.
this.superAdmin = superAdmin;
this.isActive = isActive;
}
deleteWebsite(){
if(this.superAdmin && this.isActive){
console.log("deleted");
}
else{
console.log("no permission");
}
}
}
const admin = new Admin({
userName : "gildong",
lastName : "hong",
email : "[email protected]",
password : "1234",
superAdmin : true,
isActive : false
});
admin.deleteWebsite();
class function 내에서의 this
class 내에서의 this 는 해당 class 를 나타낸다.
하지만 eventListener 에 지정된 function 에서의 this 는 해당 dom 객체가 된다.
this 키워드는 때에 따라 달라질수 있으므로 이를 방지하여야 한다.
class 내의 function 을 선언할 때는 arrow function 을 사용하도록 하자
class Counter{
constructor({initialNumber = 0, counterId, plusId, minusId}){
this.count = initialNumber;
this.counter = document.getElementById(counterId);
this.plusBtn = document.getElementById(plusId);
this.minusBtn = document.getElementById(minusId);
this.addEventListner();
this.repaintCount();
}
addEventListner(){
this.plusBtn.addEventListener("click", this.increase);
this.minusBtn.addEventListener("click", this.decrease);
}
increase() {
console.log(this);
//여기의 this 는 + 버튼 을 나타낸다.
}
decrease = () => {
console.log(this);
//여기의 this 는 Counter 클래스를 나타낸다.
}
repaintCount(){
this.counter.innerText = this.count;
}
}
new Counter({
initialNumber : 0,
counterId : "count",
plusId : "add",
minusId : "minus"
});
=> 아래와 같이 arrow function 을 이용하면 된다.
addEventListner = () => {
this.plusBtn.addEventListener("click", this.increase);
this.minusBtn.addEventListener("click", this.decrease);
}
increase = () => {
this.count = this.count + 1;
this.repaintCount();
}
decrease = () => {
this.count = this.count - 1;
this.repaintCount();
}
repaintCount = () => {
this.counter.innerText = this.count;
}
Author And Source
이 문제에 관하여(ES6 스터디 정리 : Classes), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@carlos1209/ES6-스터디-정리-Classes저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)