diff --git a/assignments/lambda-classes.js b/assignments/lambda-classes.js index 71acfca0e..7fec96684 100644 --- a/assignments/lambda-classes.js +++ b/assignments/lambda-classes.js @@ -1 +1,82 @@ // CODE here for your Lambda Classes + +class Person { + constructor(attributes) { + this.name = attributes.name; + this.age = attributes.age; + this.location = attributes.location; + } + + speak() { + return `Hello, my name is ${this.name}, I am from ${this.location}.` + } +} + +class Instructor extends Person { + constructor(attributes) { + super(attributes); + this.specialty = attributes.specialty; + this.favLanguage = attributes.favLanguage; + this.catchPhrase = attributes.catchPhrase; + } + + demo() { + const subject = 'JavaScript'; + return `Today we are learning about ${this.subject}.` + } + + grade() { + const studentname = 'Jashele Tillman'; + return `${this.studentname} receives a perfect score on ${this.subject}.` + } +} + + +class Student extends Person { + constructor(attributes) { + super(attributes); + this.previousbackground = attributes.previousbackground; + this.className = attributes.className; + this.favSubjects = attributes.favSubjects; + } + + listsSubjects() { + return `${this.favSubjects}`; + } + + PRAssignments() { + return `${this.studentname} has submitted a PR for ${this.subject}.` + } + + sprintChallenge() { + return `${this.studentname} has begun sprint challenge on ${this.subject}.` + } + +} + +class ProjectManager extends Person { + constructor(attributes) { + super(attributes); + this.gradClassName = attributes.gradClassName; + this.favInstructor = attributes.favInstructor; + } + + standUp(channel) { + return `${this.name} announces to ${channel}, @channel standby times!`; + } + debugsCode() { + return `${this.name} debugs ${this.studentname} code on ${this.subject}.`; + } +} + +const Jashele = new Student ({ + name: 'Jashele', + age: 100, + location: 'Earth', + previousbackground: 'Panda', + className: 'Web PT 7', + favSubjects: ['User Interface'] +}) + +console.log(Jashele); + diff --git a/assignments/prototype-refactor.js b/assignments/prototype-refactor.js index 91424c9fa..9d37c69d6 100644 --- a/assignments/prototype-refactor.js +++ b/assignments/prototype-refactor.js @@ -7,3 +7,197 @@ 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: +*/ + + +// Notes: +// GameObject -> CharacterStats -> Humanoid + + + + +// === GameObject === + + // function GameObject(GameObj) { + // this.createdAt = GameObj.createdAt; + // this.name = GameObj.name; + // this.dimensions = GameObj.dimensions; // (These represent the character's size in the video game) + // }; + + + // GameObject Object Refactored: + + class GameObject { + constructor(GameObj){ + this.createdAt = GameObj.createdAt; + this.name = GameObj.name; + this.dimensions = GameObj.dimensions; + } + + + +// GameObject.prototype.destroy = function() { +// return `${this.name} was removed from the game.`; // prototype method that returns: `${this.name} was removed from the game.` +// } + + + + // Prototype Refactored: + destroy() { + return `${this.name} was removed from the game.`; + } +} + + + + + // === CharacterStats === + +// function CharacterStats(charAttrs) { +// GameObject.call(this, charAttrs); +// this.healthPoints = charAttrs.healthPoints; +// }; + + + + // CharacterStats Refactored: + + class CharacterStats extends GameObject { + constructor(charAttrs){ + super(charAttrs); + this.healthPoints = charAttrs.healthPoints; + } + + + +// CharacterStats.prototype = Object.create(GameObject.prototype); + +// CharacterStats.prototype.takeDamage = function () { +// return `${this.name} took damage`; +// } + + + +// CharacterStats Prototype Refactored: + + takeDamage(){ + return `${this.name} took damage`; + } +} + + + + + + // === Humanoid (Having an appearance or character resembling that of a human.) === + + // function Humanoid(HumanoidAttr) { + // CharacterStats.call(this, HumanoidAttr); + // this.team = HumanoidAttr.team; + // this.weapons = HumanoidAttr.weapons; + // this.language = HumanoidAttr.language; + // }; + + + + // Humanoid Refactored: + + class Humanoid extends CharacterStats { + constructor(HumanoidAttr) { + super(HumanoidAttr); + this.team = HumanoidAttr.team; + this.weapons = HumanoidAttr.weapons; + this.language = HumanoidAttr.language; + } + + + // Humanoid.prototype = Object.create(CharacterStats.prototype); + // should inherit takeDamage() from CharacterStats + + + // Humanoid.prototype.greet = function() { + // return `${this.name} offers a greeting in ${this.language}.` + // // prototype method -> returns the string ' offers a greeting in .' + // } + + // Humanoid Prototype Refactor: + + 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