본문 바로가기
카테고리 없음

24.01.05(JS 3주차까지 복습완)

by 어뇨 2024. 1. 5.

TIL



  • 오늘 한 분량
var user = {
    name: "john",
    age: 20,
}

var getAged = function (user, passedTime) {
    // 여기를 작성해 주세요!
    let agedUser = {
        name: user.name,
        age: user.age + passedTime,
    };
    return agedUser;
}

var agedUser = getAged(user, 6);

var agedUserMustBeDifferentFromUser = function (user1, user2) {
    if (!user2) {
        console.log("Failed! user2 doesn't exist!");
    } else if (user1 !== user2) {
        console.log("Passed! If you become older, you will be different from you in the past!")
    } else {
        console.log("Failed! User same with past one");
    }
}

agedUserMustBeDifferentFromUser(user, agedUser);


숙제 1.  처음엔 이렇게 단순하게 getAged에 복사하면 되는건가? 싶어서 그대로 복사한 뒤 제출했는데, 
생각해보니 얕은복사를 이용해서 풀어보라는 의도 였던거 같았다...

let getAged = function (user, passedTime) {
    let result = {};

    for (let prop in user) {
        result[prop] = user[prop];
    }
    result.age += passedTime;
    return result
}


이렇게 제출했어야 했던거같은데 아쉽다. 이어서 두번째 숙제는

 

var fullname = 'Ciryl Gane'

var fighter = {
    fullname: 'John Jones',
    opponent: {
        fullname: 'Francis Ngannou',
        getFullname: function () {
            return this.fullname;
        }
    },

    getName: function () {
        return this.fullname;
    },

    getFirstName: () => {
        return this.fullname.split(' ')[0];
    },

    getLastName : (function () {
        return this.fullname.split(' ')[1];
    })()

}

console.log('Not', fighter.opponent.getFullname(), 'VS', fighter.getName());
console.log('It is', fighter.getName(), 'VS', fighter.getFirstName(), fighter.getLastName);

숙제 2. 이번엔 이미 코드가 다 짜여있고 어떤방식으로 코드가 동작하는지 설명하는거였습니다.

우선  fighter.opponent.getFullname()은 메서드로 호출이 되었기 때문에 그 호출의 주체인 opponent에서 fullname값인 은가누를 반환했고 
fighter.getName()은 호출의 주체가 fighter이므로 존 존스를 반환,
화살표 함수는  this를 바인딩 하지 않기 때문에 일반 함수에서 this는 전역개체가 나오지만 화살표함수는 상위값이 유지가 된다. 그러므로 getFirstName()의 상위값인 전역개체에서 full name인 시릴 간 그리고 split 으로 띄어쓰기를 기준으로 0번째인 시릴이 반환이 된다.
마지막으로 console.log안에있는 fighter.getLastName은 앞의 예제와는 다르게 함수를 호출하는게 아니라 fighter안에있는 getLastName을 불러와라 라는 것이기 때문에 즉시 실행 함수 ()()의 전역개체의 full name 값인 시릴 간. 역시 마찬가지로 split 으로 띄어쓰기를 기준으로 1번째인 간이 반환이 된다.

  • 느낀것

숙제 1 은 아쉬웠고 2는 배운걸 복습하는 느낌이라 좋았습니다. 
아쉬웠던건 아무래도 생각나는대로 하고 제출을 했는데, 문제를 다시 한번 봤으면 의도를 파악하고 숙제를 풀었을거 같아 아쉬웠습니다.