forked from OleksiyRudenko/a-tiny-JS-world
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
106 lines (89 loc) · 3.09 KB
/
index.js
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/* Refer to https://github.com/OleksiyRudenko/a-tiny-JS-world for the task details
Complete the below for code reviewers' convenience:
Code repository: _put repo URL here_
Web app: _put project's github pages URL here_
*/
// ======== OBJECTS DEFINITIONS ========
// Define your objects here
class Inhabitant {
constructor(species, name, gender, phrase, friends = [], legs) {
this.friends = friends;
this.addFriends(friends);
this.species = species;
this.name = name;
this.gender = gender;
this.legs = legs;
this.phrase = phrase;
}
addFriends(friends) {
this.friends = [...this.friends, ...friends];
}
listFriendNames() {
return this.friends.length
? this.friends.map(friend => friend.name).join(", ")
: 'no friends'
}
sayPhrase() {
return this.phrase;
}
toString() {
return `Hello! I am <strong>${this.species}</strong>, my name is <strong>${
this.name
}</strong>, my gender is <strong>${
this.gender
}</strong>,My friends: <strong>${
this.listFriendNames()
}</strong> and you know what: <strong>${this.sayPhrase()}</strong>`;
}
}
class Cat extends Inhabitant {
constructor(name, gender, phrase, friends, legs = 4) {
super('cat', name, gender, phrase, friends, legs);
}
toString() {
return super.toString() + ` I have <strong>${this.legs}</strong> legs`;
}
}
class Dog extends Inhabitant {
constructor(name, gender, phrase, friends, legs = 4) {
super('dog', name, gender, phrase, friends, legs);
}
toString() {
return super.toString() + ` I have <strong>${this.legs}</strong> legs`;
}
}
class Human extends Inhabitant {
constructor(name, gender, phrase, friends, hands = 2, legs = 2) {
super('human', name, gender, phrase, friends, legs);
this.hands = hands;
}
toString() {
return (
super.toString() + ` I have <strong>${this.hands}</strong> hands and <strong>${this.legs}</strong> legs`
);
}
}
const dog = new Dog('Maki', 'male', 'Bark-bark!');
const cat = new Cat('Prokhor', 'male', 'Meow!');
const man = new Human('Alfred', 'male', 'Master Bruce!');
const woman = new Human('Anna', 'female', 'Need more money!');
dog.friends = [cat, man];
cat.friends = [woman, dog];
man.friends = [woman, dog, cat, man];
// ======== OUTPUT ========
/* Use print(message) for output.
Default tag for message is <pre>. Use print(message,'div') to change containing element tag.
Message can contain HTML markup. You may also tweak index.html and/or styles.css.
However, please, REFRAIN from improving visuals at least until your code is reviewed
so code reviewers might focus on a single file that is index.js.
*/
const inhabitants = [man, woman, dog, cat];
inhabitants.forEach((habitant) => print(habitant));
/* Print examples:
print('ABC');
print('<strong>ABC</strong>');
print('<strong>ABC</strong>', 'div');
print('human; John; male; 2; 2; Hello world!; Rex, Tom, Jenny');
print('human; <strong>John</strong>; male; 2; 2; <em>Hello world!</em>; Rex, Tom, Jenny');
print('human; <strong>John</strong>; male; 2; 2; <em>Hello world!</em>; Rex, Tom, Jenny', 'div');
*/