# Javascript
# Class
## Sub classing with `extends`
```
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name) {
super(name); // call the super class constructor and pass in the name parameter
}
speak() {
console.log(`${this.name} barks.`);
}
}
let d = new Dog('Mitzie');
d.speak(); // Mitzie barks.
```
# AJAX
## Promise
snippet of a function that returns a promise.
```
function tetheredGetNumber(resolve, reject) {
try {
setTimeout(
function() {
const randomInt = Date.now();
const value = randomInt % 10;
try {
if(value >= THRESHOLD_A) {
throw new Error(`Too large: ${value}`);
}
} catch(msg) {
reject(`Error in callback ${msg}`);
}
resolve(value);
return;
}, 500);
// To experiment with error at set-up, uncomment the following 'throw'.
// throw new Error("Bad setup");
} catch(err) {
reject(`Error during setup: ${err}`);
}
return;
}
```
## async await