diff --git a/assignments/lambda-classes.js b/assignments/lambda-classes.js index 71acfca0e..b7c5071b9 100644 --- a/assignments/lambda-classes.js +++ b/assignments/lambda-classes.js @@ -1 +1,109 @@ // CODE here for your Lambda Classes +class Person { + constructor(person) { + this.name = person.name + this.age = person.age + this.location = person.location + } + speak() { + return `Hello my name is ${this.name}, I am from ${this.location}` + } +} + +class Instructor extends Person { + constructor(instructor) { + super(instructor) + this.specialty = instructor.specialty + this.favLanguage = instructor.favLanguage + this.catchPhrase = instructor.catchPhrase + } + demo(subject) { + return `Today we are learning about ${subject}` + } + grade(student, subject) { + return `${student.name} receives a perfect score on ${subject}!` + } +} + +class Student extends Person { + constructor(student) { + super(student) + this.previousBackGround = student.previousBackGround + this.className = student.className + this.favSubjects = student.favSubjects + } + listsSubjects() { + return this.favSubjects.map(subject => console.log(subject)) + // this.favSubjects.forEach(element => { + // console.log(element) + // }) + } + PRAssignment(subject) { + return `${this.name} has submitted a PR for ${subject}` + } + sprintChallenge(subject) { + return `${this.name} has begun sprint challenge on ${subject}` + } +} + +class ProjectManager extends Instructor { + constructor(projectManager) { + super(projectManager) + this.gradClassName = projectManager.gradClassName + this.favInstructor = projectManager.favInstructor + } + standUp(channel) { + return `${this.name} announces to ${channel}, @channel standy times!` + } + debugsCode(student, subject) { + return `${this.name} debugs ${student.name}'s code on ${subject}` + } +} + +const peter = new Person({ + name: 'Fred', + age: 35, + location: 'Chicago' +}) + +const fred = new Instructor({ + name: 'Fred', + age: 37, + location: 'Bedrock', + favLanguage: 'JavaScript', + specialty: 'Front-end', + catchPhrase: `Don't forget the homies` + +}) + +const jess = new Student({ + name: 'jess', + age: 16, + location: 'Minnesota', + previousBackGround: 'Java', + className: 'Intro to Java', + favSubjects: ['C++', 'Java', 'Python', 'Javascript'] +}) + +const PM = new ProjectManager({ + name: 'John', + age: 22, + location: 'San Diego', + gradClassName: 'CS1', + favInstructor: 'Sean' +}) + +console.log(peter.speak()) + +console.log(fred.demo('Classes')) +console.log(fred.grade(jess, 'Python')) + +console.log(jess.previousBackGround) +console.log(jess.className) +console.log(jess.listsSubjects()) +console.log(jess.PRAssignment('Angular')) +console.log(jess.sprintChallenge('JS IV')) +console.log(jess.speak()) +console.log(PM.standUp('@PM11')) +console.log(PM.debugsCode(fred, 'Java')) +console.log(PM.speak()) \ No newline at end of file diff --git a/assignments/prototype-refactor.js b/assignments/prototype-refactor.js index 91424c9fa..ea71f11f2 100644 --- a/assignments/prototype-refactor.js +++ b/assignments/prototype-refactor.js @@ -7,3 +7,172 @@ Prototype Refactor 2. Your goal is to refactor all of this code to use ES6 Classes. The console.log() statements should still return what is expected of them. */ +/* + Object oriented design is commonly used in video games. For this part of the assignment you will be implementing several constructor + functions with their correct inheritance hierarchy. + + In this file you will be creating three constructor functions: GameObject, CharacterStats, Humanoid. + + At the bottom of this file are 3 objects that all end up inheriting from Humanoid. Use the objects at the bottom of the page + to test your constructor functions. + + Each constructor function has unique properties and methods that are defined in their block comments below: +*/ + +/* + === GameObject === + * createdAt + * name + * dimensions (These represent the character's size in the video game) + * destroy() // prototype method that returns: `${this.name} was removed from the game.` +*/ +// function GameObject (attrs) { +// this.createdAt = attrs.createdAt +// this.name = attrs.name +// this.dimensions = attrs.dimensions +// } +// GameObject.prototype.destroy = function () { +// return (`${this.name} was removed from the game.`) +// } + +class GameObject { + constructor(attrs) { + this.createdAt = attrs.createdAt + this.name = attrs.name + this.dimensions = attrs.dimensions + } + destroy() { + return (`${this.name} was removed from the game.`) + } +} + +/* + === CharacterStats === + * healthPoints + * takeDamage() // prototype method -> returns the string ' took damage.' + * should inherit destroy() from GameObject's prototype +*/ +// function CharacterStats (character) { +// GameObject.call(this, character) +// this.healthPoints = character.healthPoints +// } +// CharacterStats.prototype = Object.create(GameObject.prototype) +// CharacterStats.prototype.takeDamage = function () { +// return (`${this.name} took damage`) +// } + +class CharacterStats extends GameObject { + constructor(character) { + super(character) + this.healthPoints = character.healthPoints + } + takeDamage() { + return (`${this.name} took damage`) + } +} + +/* + === Humanoid (Having an appearance or character resembling that of a human.) === + * team + * weapons + * language + * greet() // prototype method -> returns the string ' offers a greeting in .' + * should inherit destroy() from GameObject through CharacterStats + * should inherit takeDamage() from CharacterStats +*/ +// function Humanoid(human) { +// CharacterStats.call(this, human) +// this.team = human.team +// this.weapons = human.weapons +// this.language = human.language +// } +// Humanoid.prototype = Object.create(GameObject.prototype) +// Humanoid.prototype = Object.create(CharacterStats.prototype) +// Humanoid.prototype.greet = function() { +// return `${this.name} offers a greeting in ${this.language}` +// } +class Humanoid extends CharacterStats { + constructor(human) { + super(human) + this.team = human.team + this.weapons = human.weapons + this.language = human.language + } + greet() { + return `${this.name} offers a greeting in ${this.language}` + } +} + +/* + * Inheritance chain: GameObject -> CharacterStats -> Humanoid + * Instances of Humanoid should have all of the same properties as CharacterStats and GameObject. + * Instances of CharacterStats should have all of the same properties as GameObject. + */ + +// Test you work by un-commenting these 3 objects and the list of console logs below: + +const mage = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 2, + width: 1, + height: 1 + }, + healthPoints: 5, + name: 'Bruce', + team: 'Mage Guild', + weapons: [ + 'Staff of Shamalama' + ], + language: 'Common Tongue' +}) + +const swordsman = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 2, + width: 2, + height: 2 + }, + healthPoints: 15, + name: 'Sir Mustachio', + team: 'The Round Table', + weapons: [ + 'Giant Sword', + 'Shield' + ], + language: 'Common Tongue' +}) + +const archer = new Humanoid({ + createdAt: new Date(), + dimensions: { + length: 1, + width: 2, + height: 4 + }, + healthPoints: 10, + name: 'Lilith', + team: 'Forest Kingdom', + weapons: [ + 'Bow', + 'Dagger' + ], + language: 'Elvish' +}) + +console.log(mage.createdAt); // Today's date +console.log(archer.dimensions); // { length: 1, width: 2, height: 4 } +console.log(swordsman.healthPoints) // 15 +console.log(mage.name) // Bruce +console.log(swordsman.team) // The Round Table +console.log(mage.weapons) // Staff of Shamalama +console.log(archer.language) // Elvish +console.log(archer.greet()); // Lilith offers a greeting in Elvish. +console.log(mage.takeDamage()); // Bruce took damage. +console.log(swordsman.destroy()); // Sir Mustachio was removed from the game. + +// Stretch task: +// * Create Villain and Hero constructor functions that inherit from the Humanoid constructor function. +// * Give the Hero and Villains different methods that could be used to remove health points from objects which could result in destruction if health gets to 0 or drops below 0 +// * Create two new objects, one a villain and one a hero and fight it out with methods! \ No newline at end of file