JavaScript_ Build a Library
19551 단어 JavaScripttestJavaScript
- class, object, 상속, getter, setter 등을 이용하여 라이브러리 구축해보기
- 3가지 미디어가 존재(book, movie, cd)하며 아래와 같은 속성 및 메서드가 있음
- toggleCheckOutStatus()는 isCheckedOut 의 값을 가져오는데 이때 값이 true면 false로, false면 true로 변환되도록 한다.
- getAverageRating 메서드는 ratings 배열의 값의 평균을 return하며, ratings 배열의 합계는 reduce method를 통해서 구한 후, ratings 배열의 length로 나누어서 retrun해야한다.
- 하나의 인자가 있는 addRating을 만들고 .push()를 통하여 ratings에 값을 추가할 수 있도록 만들기
- extends를 통해 book class와 Movie class 만들기(properties, getters, methods 활용)
- historyOfEverything 변수명으로 아래 properties를 통해 Book instance 만들기
- Author: 'Bill Bryson'
- Title: 'A Short History of Nearly Everything'
- pages: 544
- historyOfEverything 인스턴스에서 toggleCheckOutStatus() 호출하기
- historyOfEverything 인스턴스에 isCheckedOut에 저장된 값 log 하기
- 4, 5, 5 값을 입력하며 historyOfEverything 에서 .addRating() 세 번 호출하기
- historyOfEverything에 .getAverageRating() log하기
- speed 변수명으로 아래 properties를 통해 Movie instance 만들기
- Director: 'Jan de Bont'
- Title: 'Speed'
- Runtime: 116
- speed 인스턴스에서 toggleCheckOutStatus() 호출하기
- speed 인스턴스에 isCheckedOut에 저장된 값 log 하기
- 1, 1, 5 값을 입력하여 speed에서 .addRating() 세 번 호출하기
- speed에 .getAverageRating() log하기
- 위와 동일하게 CD 클래스를 만들어 보기
- singer : 'Gemma Brown'
- title : 'sunny day'
- Track: 8
- 변수명 : timeless
- rating: 2,4,5
[Output]
true
4.666666666666667
true
2.3333333333333335
true
3.6666666666666665
class Media {
constructor(title) {
this._title = title;
this._isCheckedOut = false;
this._ratings = [];
}
get title() {
return this._title;
}
get isCheckedOut() {
return this._isCheckedOut;
}
get ratings() {
return this._ratings;
}
set isCheckedOut(value) {
this._ischeckedOut = values;
}
toggleCheckOutStatus() {
this._isCheckedOut = !this._isCheckedOut;
}
getAverageRating() {
let ratingSum = this._ratings.reduce((accumulator, rating) => accumulator + rating);
return ratingSum / this.ratings.length;
}
addRating(value) {
this._ratings.push(value);
}
}
//creating Book class
class Book extends Media {
constructor(author, title, pages) {
super(title); // Pass it any arguments that the parent constructor uses
this._author = author;
this._pages = pages;
}
get author() {
return this._author;
}
get pages() {
return this._pages;
}
}
// creating Movie class
class Movie extends Media {
constructor(director, title, runTime) {
super(title);
this._director = director;
this._runTime = runTime;
}
get director() {
return this._director;
}
get pages() {
return this._pages;
}
}
// historyOfEverything
const historyOfEverything = new Book('Bill Bryson', 'A Short History of Nearly Everything', 544);
historyOfEverything.toggleCheckOutStatus();
console.log(historyOfEverything.isCheckedOut);
historyOfEverything.addRating(4);
historyOfEverything.addRating(5);
historyOfEverything.addRating(5);
console.log(historyOfEverything.getAverageRating());
// speed
const speed = new Movie('Jan de Bont', 'Speed', 116);
speed.toggleCheckOutStatus();
console.log(speed.isCheckedOut);
speed.addRating(1);
speed.addRating(1);
speed.addRating(5);
console.log(speed.getAverageRating());
// creating CD
class CD extends Media {
constructor(singer, title, track) {
super(title);
this._singer = singer;
this._track = track;
}
get singer() {
return this._singer;
}
get track() {
return this._track;
}
}
const timeless = new CD('Gemma Brown', 'Sunny day', 8);
timeless.toggleCheckOutStatus();
console.log(timeless.isCheckedOut);
timeless.addRating(2);
timeless.addRating(4);
timeless.addRating(5);
console.log(timeless.getAverageRating());
Author And Source
이 문제에 관하여(JavaScript_ Build a Library), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sebely/JavaScript-Build-a-Library저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)