노력이 좋아서

<step59>'js_복습(2)'

zoaseo 2022. 6. 14. 10:31

1) 객체

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //객체 리터럴 방식
        //키에는 문자형, 값은 모든 자료형
        let obj1 = new Object();
        //객체 생성자 방식
        let obj2 = {};

        obj1.name = "green";
        obj2.name = "blue";
        obj1.age = 20;
        obj2.age = 30;
        console.log(obj1);
        console.log(obj2);
        //프로퍼티 삭제하기
        delete obj1.age;
        console.log(obj1);
        let user = {
            name:"John",
            age: 30,
            "likes birds":true,
        }
        //.표기법 obj.key
        //대괄호 표기법 obj['key']
        console.log(user.name);
        console.log(user.age);
        console.log(user['likes birds']);
        //단축 프로퍼티
        //생성자 함수
        function Student(name, age, score, phone){
            this.name = name;
            this.age = age;
            this.score = score;
            this.phone = phone;
        }
        let stu1 = new Student("민영",22,90,'01012341234');
        let stu2 = new Student("수진",27,60,'01055551234');
        console.log(stu1);
        console.log(stu2);
        //단축 프로퍼티
        //name: name => name
        //age: age => age
        function makeUser(name, age){
            return {
                name,
                age,
            }
        }
        let user2 = makeUser("green",20);
        console.log(user2);

        // in연산자 - 객체의 프로퍼티가 있는지 확인
        // "key" in object
        console.log("name" in user2);   //true
        console.log("abc" in user2);   //false

        // for in 반복문
        for(let key in user2){
            console.log(`객체의 key는 ${key}입니다.`);
            console.log(`객체의 값은 ${user2[key]}입니다.`);
        }

        // 프로퍼티 합계 구하기
        let students = {
            a: 90,
            b: 80,
            c: 60,
        }
        // 학생들의 점수를 다 더한 값을 리턴해주는 함수를 생성하시오.
        function stuendentSum(stus){
            let sum = 0;
            for(let key in stus){
                sum += stus[key];
            }
            return sum;
        }
        console.log(stuendentSum(students));
        // Object.keys(obj) -> 객체의 키를 담은 배열을 반환
        // Object.values(obj) -> 객체의 값만 담은 배열을 반환
        // Object.entries(obj) -> [키, 값]을 담은 배열을 반환
        // Object.fromEntries(array) -> 배열을 다시 객체로 반환
        let keyArr = Object.keys(user2);
        let valueArr = Object.values(user2);
        let entriArr = Object.entries(user2);
        console.log(keyArr);
        console.log(valueArr);
        console.log(entriArr);
        let newObj = Object.fromEntries(entriArr);
        
        //프로퍼티 개수 구하기
        let dog = {
            name: "구름",
            age: 3,
            color: "white",
        }
        //객체를 매개변수로 받아서 그 객체의 프로퍼티가 몇개인지 반환해주는
        //함수를 만드시오.
        function count(h){
            let b=[];
            for(let key in h){
                b.push(h[key]);
            }
            return b.length;
        }
        console.log(count(dog));
    </script>
</body>
</html>

2) 클래스

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 클래스 선언하기
        class Person {
            constructor(name, age){
                this.name = name;
                this.age = age;
            }
            //메서드
            speak(){
                console.log(`${this.name}: 안녕~`);
            }
        }
        //객체생성
        const min = new Person('min',30);
        const green = new Person('green',25);
        console.log(min.name);
        console.log(min.age);
        min.speak();
        green.speak();

        //클래스 상속
        //extends를 이용하여 클래스를 상속받음
        //네모, 삼각형, 원을 만들기 전 모양이라는 클래스를 생성 
        //모양이라는 클래스를 네모, 삼각형, 원이 상속을 받도록 함.
        class Shape {
            constructor(width,height,color){
                this.width = width;
                this.height = height;
                this.color = color;
            }
            draw(){
                console.log(`모양의 색은 ${this.color}로 그린다.`);
            }
            getArea(){
                return this.width * this.height;
            }
        }
        class Rectangle extends Shape {

        }
        class Triangle extends Shape {
            //오버라이딩 
            //필요한 함수만 재정의
            draw(){
                //슈퍼를 이용하여 부모요소에 있는 메소드도 적용
                super.draw();
                console.log('삼각형을 그립니다.');
            }
        }
        const rectangle = new Rectangle(20,20,'blue');
        rectangle.draw();
        console.log(rectangle.getArea());
        const triangle = new Triangle(20,40,'red');
        triangle.draw();
        //instanceof
        //a instanceof b : a가 b를 이용해서 만들어졌는지
        console.log(rectangle instanceof Shape);
        console.log(rectangle instanceof Rectangle);
        console.log(triangle instanceof Shape);
        console.log(triangle instanceof Rectangle);
        console.log(rectangle instanceof Object);
        console.log(rectangle);
    </script>
</body>
</html>