mirror of https://github.com/01-edu/public.git
feat(animals): add more properties and methods to improve the exercise
This commit is contained in:
parent
32f8424d81
commit
b3c3e3205a
|
@ -106,6 +106,30 @@ t(({ eq }) => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Test Dodo
|
||||||
|
t(({ eq }) => {
|
||||||
|
let myDog = new Dog("Rex")
|
||||||
|
let myBird = new Bird()
|
||||||
|
let myDodo = new Dodo("Dill")
|
||||||
|
return eq(
|
||||||
|
{
|
||||||
|
name: myDog.name,
|
||||||
|
hasOwn: Object.hasOwn(myDog, 'name'),
|
||||||
|
name: myBird.name,
|
||||||
|
hasOwn: Object.hasOwn(myBird, 'name'),
|
||||||
|
name: myDodo.name,
|
||||||
|
hasOwn: Object.hasOwn(myDodo, 'name'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Rex",
|
||||||
|
hasOwn: true,
|
||||||
|
name: "Anonymous",
|
||||||
|
hasOwn: false,
|
||||||
|
name: "Dill",
|
||||||
|
hasOwn: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
export const setup = () => {
|
export const setup = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,14 +8,17 @@ In order to understand how `prototypal inheritance` works you will have to recre
|
||||||
|
|
||||||
You will have `Animal` which will an object and will have the following properties:
|
You will have `Animal` which will an object and will have the following properties:
|
||||||
- `canEat`, `canBreath`, `isAlive`: All booleans, set to true.
|
- `canEat`, `canBreath`, `isAlive`: All booleans, set to true.
|
||||||
|
- `name`: set to `"Anonymous"`.
|
||||||
- `WhoAmI`: Function that returns a string, here it will be `"I'm an animal"`.
|
- `WhoAmI`: Function that returns a string, here it will be `"I'm an animal"`.
|
||||||
|
- `NameToUppercase`: Function that returns `name` to uppercase.
|
||||||
|
|
||||||
The following objects will inherit from `Animal` and add/override fields as follow:
|
The following objects will inherit from `Animal` and add/override fields as follow:
|
||||||
- `Dog`: adds property `canRun` set to `true`.
|
- `Dog`: adds property `canRun` set to `true`.
|
||||||
- `Bird`: adds properties `canFly` and `makesEggs` set to `true`.
|
- `Bird`: adds properties `canFly` and `makesEggs` set to `true`.
|
||||||
- `Dodo`: overrides `canFly` and `isAlive` to `false`.
|
- `Dodo`: inherits from `Bird` and overrides `canFly` and `isAlive` to `false`.
|
||||||
|
|
||||||
All of them will override `WhoAmI`, returning `"I'm a [animal name]"`.
|
- All of them will override `WhoAmI`, returning `"I'm a [animal name]"`.
|
||||||
|
- All can accept a specific `name` as argument when created or use the default in `Animal` if no argument is provided.
|
||||||
|
|
||||||
> There are many different ways to work on prototypes, we suggest to use `Object.assign` and similar functions, but feel free to experiment other ways to understand the differences.
|
> There are many different ways to work on prototypes, we suggest to use `Object.assign` and similar functions, but feel free to experiment other ways to understand the differences.
|
||||||
|
|
||||||
|
@ -27,8 +30,8 @@ Here is a possible program to test your function:
|
||||||
// Your implementation of Animal, Dog, Bird and Dodo ...
|
// Your implementation of Animal, Dog, Bird and Dodo ...
|
||||||
|
|
||||||
const myDog = new Dog()
|
const myDog = new Dog()
|
||||||
const myBird = new Bird()
|
const myBird = new Bird("Trill")
|
||||||
const myDodo = new Dodo()
|
const myDodo = new Dodo("Mallone")
|
||||||
console.log("canEat: " + myDog.canEat + " | hasOwn: " + Object.hasOwn(myDog, "canEat"))
|
console.log("canEat: " + myDog.canEat + " | hasOwn: " + Object.hasOwn(myDog, "canEat"))
|
||||||
console.log("canEat: " + myBird.canEat + " | hasOwn: " + Object.hasOwn(myBird, "canEat"))
|
console.log("canEat: " + myBird.canEat + " | hasOwn: " + Object.hasOwn(myBird, "canEat"))
|
||||||
console.log("canEat: " + myDodo.canEat + " | hasOwn: " + Object.hasOwn(myDodo, "canEat"))
|
console.log("canEat: " + myDodo.canEat + " | hasOwn: " + Object.hasOwn(myDodo, "canEat"))
|
||||||
|
@ -39,6 +42,12 @@ console.log("makesEggs: " + myDodo.makesEggs + " | hasOwn: " + Object.hasOwn(myD
|
||||||
console.log("WhoAmI: " + myDog.WhoAmI() + " | hasOwn: " + Object.hasOwn(myDog, "WhoAmI"))
|
console.log("WhoAmI: " + myDog.WhoAmI() + " | hasOwn: " + Object.hasOwn(myDog, "WhoAmI"))
|
||||||
console.log("WhoAmI: " + myBird.WhoAmI() + " | hasOwn: " + Object.hasOwn(myBird, "WhoAmI"))
|
console.log("WhoAmI: " + myBird.WhoAmI() + " | hasOwn: " + Object.hasOwn(myBird, "WhoAmI"))
|
||||||
console.log("WhoAmI: " + myDodo.WhoAmI() + " | hasOwn: " + Object.hasOwn(myDodo, "WhoAmI"))
|
console.log("WhoAmI: " + myDodo.WhoAmI() + " | hasOwn: " + Object.hasOwn(myDodo, "WhoAmI"))
|
||||||
|
console.log("name: " + myDog.name + " | hasOwn: " + Object.hasOwn(myDog, "name"))
|
||||||
|
console.log("name: " + myBird.name + " | hasOwn: " + Object.hasOwn(myBird, "name"))
|
||||||
|
console.log("name: " + myDodo.name + " | hasOwn: " + Object.hasOwn(myDodo, "name"))
|
||||||
|
console.log("NameToUppercase: " + myDog.NameToUppercase() + " | hasOwn: " + Object.hasOwn(myDog, "NameToUppercase"))
|
||||||
|
console.log("NameToUppercase: " + myBird.NameToUppercase() + " | hasOwn: " + Object.hasOwn(myBird, "NameToUppercase"))
|
||||||
|
console.log("NameToUppercase: " + myDodo.NameToUppercase() + " | hasOwn: " + Object.hasOwn(myDodo, "NameToUppercase"))
|
||||||
```
|
```
|
||||||
|
|
||||||
And its output :
|
And its output :
|
||||||
|
@ -55,6 +64,12 @@ makesEggs: true | hasOwn: true
|
||||||
WhoAmI: I'm a dog | hasOwn: true
|
WhoAmI: I'm a dog | hasOwn: true
|
||||||
WhoAmI: I'm a bird | hasOwn: true
|
WhoAmI: I'm a bird | hasOwn: true
|
||||||
WhoAmI: I'm a dodo | hasOwn: true
|
WhoAmI: I'm a dodo | hasOwn: true
|
||||||
|
name: Anonymous | hasOwn: false
|
||||||
|
name: Trill | hasOwn: true
|
||||||
|
name: Mallone | hasOwn: true
|
||||||
|
NameToUppercase: ANONYMOUS | hasOwn: false
|
||||||
|
NameToUppercase: TRILL | hasOwn: false
|
||||||
|
NameToUppercase: MALLONE | hasOwn: false
|
||||||
$
|
$
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue