Front-end/JavaScript Language

Javascript- intermediate3

prden 2022. 5. 1. 10:37

1. 클래스 :

const User = function (name, age) {
	this.name = name;
    this.age = age;
    this.showName = function(){
    	console.log(this.name);
        }
     };
     
//객체 내부에 showName이 있고
     
const mike = new User("mike", 30);

class User2{
	constructor(name, age){
    	this.name = name;
        this.age =age;
       }
    showName(){
    	console.log(this.name)
       }
    }
const tom = new User2("tom", 30);

//prototype 내부에 showname이 있다.


//클래스에서의 상속
extends

class Car(color){
	this.color = color;
    this.wheels = 4;
    }
    dirve(){
    	console.log("dirve..");
        }
    stop(){
    	console.log("STOP!");
        }
      }
class Bmw extends Car{
	park(){
    	console.log("PARK");
        }
    //여기에 stop추가하면 오버라이딩 된다. 
   	stop(){
    	//메소드 오버라이딩
        //만약 이렇게 하면 부모의 것을 확장시켜서 사용하는 것이다. 
        super.stop();
    	console.log("OFF")
     }
const z4 = new Bmw("blue");

//클래스 내부에서 선언한 메서드는 프로토타입 밑으로 들어간다. 

//생성자 오버라이딩

class Bmw extends Car{
	constructor(){
    	//부모의 생성자 먼저 호출해야 한다. 아래처럼 super()로
    	super();
        this.navigagion = 1;
       }
        park(){
        	console.log("PARK");
            }
       }

 

2. Promise

const pr = new Promise((resolve, reject) => {

 

  // code

});

 

resolve : 성공했을 때

reject : 실패했을 때

 

new Promise 생성자는 

state : pending(대기)과 

result : undefined를 프로퍼티로 받는다. 

1) resolve일 경우

resolve(value)
	state : fulfilled(이행됨)
    result : value
 
 2) reject(error)
 	state : rejected(거부됨)
    result : error
    
 
 const pr = new Promise((resolve, reject) =>{
 	setTimeout(() => {
    	resolve('OK')
        }, 3000)
      });
    pr.then(
    	function(result){} - 이행 되었을 때 실행
        fuction(err){} - 거부 되었을 때 실행
     );
    //아래와 같이 바꿀 수도 있다. 이게 가독성에 더 좋다. 
    pr.then(
    		function(result){}
        ).catch(
        	function(err){}
        )

2-1. promise all

 

//세 작업이 모두 완료 되어야 then 부분이 작동한다. 

//셋 중 하나라도 오류가 나면 then으로 가지 않는다. 

Promise.all([f1(), f2(), f3()]).then((res) => {
	console.log(res);
    });

//Promise.race
하나라도 일등으로 완료되면 끝낸다.

 

3. async, await

promise의 then 메소드를 chain형식으로 호출하는 것 보다 가독성이 좋아진다.

 

1) async

함수 앞에 async를 붙이면 항상 promise를 반환한다. 

async function getName(){
	return "Mike";
    }

console.log(getName());

//따라서 then을 사용할 수 있다. 
getName().then((name) => {
 	console.log(name);
    });

2) await : async 함수 내부에서만 사용할 수 있다. 

async function showNam(){
	const result = await getName('Mike');
    }
//await 옆에는 Promise를 반환하고 Promise가 반환될 때까지 기다린다. 

async function order(){
	try{
	const result1 = await fl();
    const result2 = await f2(result1);
    const result3 = await f3(result2);
    console.log(resutl3);
    } catch(e){
    console.log(e);
}
order();

//async await함수에서는 try-catch로 감싸주면 된다. 
// Promise는 then(), catch()로 하면 된다.

 

4. generator : 함수의 실행을 중간에 멈췄다가 제기할 수 있는 기능

제너레이터는 다른 작업을 하다가 다시 돌아와서 next()해주면 진행이 멈췄던 부분부터 이어서 실행한다.

 

fucntion * fn() {
	console.log(1);
	yield 1;
    console.log(2);
    yield 2;
    console.log(3);
    console.log(4);
    yield 3;
    return "finish";
    }
    
 const a = fn(); // 이것만 실행하면 generator 객체만 반환되고 함수 본문은 실행되지 않는다. 
 a.next();  //가장 가까운 yield문 만날 때까지 실행되고 데이터 객체 반환(value : yield 오른 쪽에 있는 값, done:전체 함수가 끝났는지 여부)
 
 generator는 next(), return(), throw() 세 가지 메소드를 갖고 있다.

generator는 

 1) iterable

 - Symbol.iterator 메서드가 있다.

 - Symbol.iterator는 iterator를 반환해야 한다. 

 

 2) iterator

 - next 메서드를 가진다. 

 - next 메서드는 value와 done 속성을 가진 객체를 반환한다. 

 - 작업이 끝나면 done은 true가 된다. 

 

배열은 반복가능한 객체이다. prototype에 Symbol.iterator메서드 있다. 

const arr = [1,2,3,4,5];

 

5. 2021 추가된 내용

//1. replaceAll

console.clear();

const str1 = "Hello World";
console.log(str1.replaceAll("l", "~")); // H~~o Wor~d

//2.Promise.any // 프로미스 중에 가장 먼저 이행된 객체 반환

Promise.race: //프로미스 중에 가장 먼저 완료된 결과값으로 이행or거부 반환한다. 

//3. 논리 연산자
function add(num1, num2){
	num1 = num1||0; // undefined면 0을 할당하게 끔 한다. 아래는 축약형 
    num2 ||=0;
    console.log(num1+num2);
  }
  
||: 앞의 값이 falsy이면 뒤의 값
??: 앞의 값이 null이나 undefined이면 뒤의 값

javascript는 숫자에 , 넣는 것 허용하지 않음 따라서
let billion = 1_000_000_000 //10억 이렇게 사용함.

 

 

'Front-end > JavaScript Language' 카테고리의 다른 글

Window 객체  (0) 2022.09.12
자바스크립트 에러 10가지  (0) 2022.05.28
Javascript - intermediate2  (0) 2022.04.29
yarn.lock & package-lock.json  (0) 2022.04.09
Console.log()  (0) 2022.02.19