댓글 검색 목록

[javascript] JavaScript의 어려운 부분 마스터하기 : 프로토 타입 및 클래스 V

페이지 정보

작성자 운영자 작성일 20-09-05 16:56 조회 580 댓글 0

서브 클래싱 및 믹스인 


연습 10 


개별적으로 복사하지 않고 userFunctionStore 객체의 모든 메서드에 액세스 할 수 있는 adminFunctionStore 객체를 만듭니다. 


const userFunctionStore = {
  sayType: function () {
    console.log("I am a " + this.type);
  },
};


해결책 10 


const adminFunctionStore = Object.create(userFunctionStore);



연습 11 


userFactory 클래스의 객체와 동일한 데이터 필드 (및 기본값)를 모두 포함하지만 각 데이터 필드를 개별적으로 복사하지 않고 객체를 만드는 adminFactory 함수를 만듭니다.


function userFactory(name, score) {
  let user = Object.create(userFunctionStore);
  user.type = "User";
  user.name = name;
  user.score = score;
  return user;
}


솔루션 11 


function adminFactory(name, score) {
  const admin = Object.create(adminFunctionStore);
  admin.name = name;
  admin.score = score;
  return admin;
}


연습 12 


그런 다음 adminFactory 개체의 'type'필드 값이 'User'가 아닌 'Admin'인지 확인하십시오. 


솔루션 12 


adminFunctionStore.type = "Admin";



연습 13 


adminFactory 오브젝트가 복사하지 않고 adminFunctionStore 메소드에 액세스 할 수 있는지 확인하십시오. 


function adminFactory(name, score) {
  // Put code here
}


솔루션 13 


function adminFactory(name, score) {
  const admin = Object.create(adminFunctionStore);
  admin.name = name;
  admin.score = score;
  return admin;
}



연습 14 


'Welcome users!'를 기록하는 sharePublicMessage라는 메서드를 만들었습니다. adminFactory 객체에는 사용할 수 있지만 userFactory 객체에는 사용할 수 없습니다. 이 메소드를 adminFactory 함수에 직접 추가하지 마십시오. 


const adminFromFactory = adminFactory("Eva", 5);
adminFromFactory.sayType();
// -> Logs "I am a Admin"
adminFromFactory.sharePublicMessage();
// -> Logs "Welcome users!"


솔루션 14 


userFunctionStore.sharePublicMessage = function () {
  console.log("Welcome users!");
};


연습 15 


Mixins는 객체 지향 프로그래밍의 도구로, 상속에 의해 제공되는 것 이상의 메서드와 속성을 객체에 부여 할 수 있습니다. 이 챌린지를 위해 누락 된 코드를 완성하여 모든 robotMixin 속성을 robotFido에 제공합니다. 속성을 개별적으로 추가하지 않고 한 줄의 코드로 이 작업을 수행합니다. 


class Dog {
  constructor() {
    this.legs = 4;
  }
  speak() {
    console.log("Woof!");
  }
}

const robotMixin = {
  skin: "metal",
  speak: function () {
    console.log(`I have ${this.legs} legs and am made of ${this.skin}`);
  },
};

let robotFido = new Dog();

robotFido = /* Put code here to give Fido robot skills */;
robotFido.speak()
// -> Logs "I am made of metal"


해결책 15 


Object.assign(robotFido, robotMixin);


JavaScript에서 각 객체의 [[prototype]]은 하나의 다른 객체 만 참조 할 수 있습니다 (전통적인 OOP에서는 각 클래스가 하나의 클래스에서만 확장 할 수 있음). 다른 곳에서 선언 된 추가 메소드를 객체에 어떻게 제공합니까? Object.assign을 사용하면 첫 번째 인수는 객체이고 두 번째 인수는 여러 메서드가 있는 객체이기도 합니다. 첫 번째 개체에 해당 메서드를 추가합니다.


이것으로 JavaScript 튜토리얼 시리즈의 마스터 링 하드 파트가 끝납니다. 각 섹션을 따르고 자신의 솔루션을 구현했다면 잠시 시간을 내어 얼마나 많이 배웠는지, JavaScript의 어려운 부분을 얼마나 이해했는지 반영하십시오!


내 튜토리얼 시리즈에 결함이 없는 것은 아니라고 확신합니다. 이러한 연습 문제를 해결하는 데 오류가 있거나 더 나은 방법을 찾으면 의견을 남기거나 github repo에 PR을 보내십시오. 감사!



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.