서브 클래싱 및 믹스인
연습 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을 보내십시오. 감사!
등록된 댓글이 없습니다.