-
[Day 35] JS 클로저 활용 & ClassTIL/멋쟁이사자처럼 FE스쿨 2기 2022. 5. 18. 23:55SMALL
클로저를 이용한 모듈패턴, 사용자 정의 타입 패턴, 혼합 패턴
1. 모듈패턴
function Person(){ let age=15; //외부에서 접근할 수 없는 값 return { getAge: function(){ return age }, setAge: function(updatedAge){ age = updatedAge } } } const person = new Person(); console.log(person.getAge()); //15 console.log(person.age);//undefined person.setAge(40) console.log(person.getAge());//40
2. 사용자 정의 타입 패턴
function Person(){ this.age=13; } Person.prototype.getAge=function(){ return this.age } Person.prototype.setAge=function(updatedAge){ return this.age = updatedAge } const person = new Person(); console.log(person.getAge()) //13 person.setAge(20); console.log(person.getAge()) //20
3. 모듈+사용자정의 혼합
function Person() { let age=10; function innerPerson(){} innerPerson.prototype.getAge=function(){ return age } return innerPerson; } const Person = new Person(); const person = new Person(); console.log(person.getAge());//10 console.log(person.age)//undefined //즉시실행함수로 인스턴스 2번 만드는 불편함 없앰. const Person = (function(){ let age=10; function innerPerson(){} innerPerson.prototype.getAge=function(){ return age } return innerPerson } )(); const person = new Person(); console.log(person.getAge());//10 console.log(person.age)//undefined
클래스
생성자+프로토타입으로 쓴 코드와 클래스로 쓴 코드 비교
function Robot(name){ this.name = name; } Robot.prototype.sayYourName = function(){ console.log(`제 이름은 ${this.name}입니다.`); } const bot1= new Robot('재현');
class RobotClass{ constructor(name){ this.name = name } sayYourName(){ console.log(`제 이름은 ${this.name}입니다.`); } } // 클래스 안에선 function 키워드를 생략한다. //prototype 설정필요없이 같은 메서드를 공유한다.
클래스 상속
부모 클래스 자식 클래스 constructor 안의 내용이 같으면 생략이 가능하다.
새로운 프로퍼티가 추가되는 경우, 부모의 프로퍼티를 super()를 이용해서 반드시 첫번째로 적어준 후
그다음 새로운 프로퍼티를 추가한다.
비공개(private) 프로퍼티
get, set 키워드를 사용 시 비공개 프로퍼티에 너무 쉽게 접근할 수 있으므로 주의가 필요하다.
반응형'TIL > 멋쟁이사자처럼 FE스쿨 2기' 카테고리의 다른 글
Firebase v9로 이메일 로그인, 회원가입 기능 구현하기 (0) 2022.07.04 [Day 40] 알고리즘- 몸풀기 & 스택 (0) 2022.05.26 [Day 34] JS 객체지향프로그래밍; 생성자함수, 프로토타입, 객체 상속 (0) 2022.05.17 [Day 33] JS 로 만드는 3D 캐러셀 (0) 2022.05.17 [Day 31] JS DOM & 이벤트 (0) 2022.05.12