-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprototype.js
More file actions
89 lines (80 loc) · 2.59 KB
/
Copy pathprototype.js
File metadata and controls
89 lines (80 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
Object oriented design is commonly used in video games. For this part of the assignment
you will be implementing several classes with their correct inheritance heirarchy.
In this file you will be creating three classes:
GameObject
createdAt
dimensions
destroy() // prototype method -> returns the string 'Game object was removed from the game.'
NPC
hp
name
takeDamage() // prototype method -> returns the string '<object name> took damage.'
// should inherit destroy() from GameObject's prototype
Humanoid
faction
weapons
language
greet() // prototype method -> returns the string '<object name> offers a greeting in <object language>.'
// should inherit destroy() from GameObject through NPC
// should inherit takeDamage() from NPC
Inheritance chain: Humanoid -> NPC -> GameObject
Instances of Humanoid should have all of the same properties as NPC and GameObject.
Instances of NPC should have all of the same properties as GameObject.
Example:
const hamsterHuey = new Humanoid({
createdAt: new Date(),
dimensions: {
length: 2,
width: 1,
height: 1,
},
hp: 5,
name: 'Hamster Huey',
faction: 'Gooey Kablooie',
weapons: [
'bubblegum',
],
language: 'Hamsterish',
});
hamsterHuey.greet(); // returns 'Hamster Huey offers a greeting in Hamsterish'
hamsterHuey.takeDamage(); // returns 'Hamster Huey took damage.'
hamsterHuey.destroy(); // returns 'Game object was removed from the game.'
*/
class GameObject {
constructor(options) {
this.createdAt = options.createdAt;
this.dimensions = options.dimensions;
}
destroy() { // destroy function within the GameObject class.
const t = this;
return 'Game object was removed from the game.';
}
}
class NPC extends GameObject { // extends GameObject gives NPC access to GameObject properties.
constructor(options) {
super(options);
this.hp = options.hp;
this.name = options.name;
}
takeDamage() {
return `${this.name} took damage.`; // this keyword referring to the object created with this constructor function.
}
}
class Humanoid extends NPC { // extends gives up access to NPC, which has access to Gameobject. Allowing us to use name, when it is not declare in current function/ class.
constructor(options) {
super(options);
this.faction = options.faction;
this.weapons = options.weapons;
this.language = options.language;
}
greet() {
return `${this.name} offers a greeting in ${this.language}.`;
}
}
/* eslint-disable no-undef */
module.exports = {
GameObject,
NPC,
Humanoid,
};