Created chapter 02

This commit is contained in:
fkereki
2018-03-24 08:57:13 -03:00
parent c602b91ef1
commit c989356391
5 changed files with 4554 additions and 1 deletions
+3 -1
View File
@@ -27,7 +27,9 @@
},
"extends": ["eslint:recommended", "plugin:flowtype/recommended"],
"plugins": ["flowtype"],
"rules": {}
"rules": {
"no-console": "off"
}
},
"prettier": {
"tabWidth": 4,
+4311
View File
File diff suppressed because it is too large Load Diff
+51
View File
@@ -0,0 +1,51 @@
{
"name": "simpleproject",
"version": "1.0.0",
"description": "A simple project to show package.json creation",
"main": "index.js",
"scripts": {
"build": "babel src -d out",
"buildNode": "flow-remove-types src/ -d out/",
"flow": "flow",
"eslint": "eslint src",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Federico Kereki",
"license": "ISC",
"babel": {
"presets": ["env", "flow"]
},
"eslintConfig": {
"parserOptions": {
"ecmaVersion": 2017,
"sourceType": "module"
},
"parser": "babel-eslint",
"env": {
"browser": true,
"node": true
},
"extends": ["eslint:recommended", "plugin:flowtype/recommended"],
"plugins": ["flowtype"],
"rules": {
"no-console": "off"
}
},
"prettier": {
"tabWidth": 4,
"printWidth": 75
},
"dependencies": {},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-eslint": "^8.2.2",
"babel-preset-env": "^1.6.1",
"babel-preset-flow": "^6.23.0",
"eslint": "^4.19.0",
"eslint-config-recommended": "^2.0.0",
"eslint-plugin-flowtype": "^2.46.1",
"flow-bin": "^0.68.0",
"flow-remove-types": "^1.2.3",
"prettier": "^1.11.1"
}
}
+59
View File
@@ -0,0 +1,59 @@
class ExtDate extends Date {
fullDate() {
const months = [
"JAN",
"FEB",
"MAR",
"APR",
"MAY",
"JUN",
"JUL",
"AUG",
"SEP",
"OCT",
"NOV",
"DEC"
];
return (
months[this.getMonth()] +
" " +
String(this.getDate()).padStart(2, "0") +
" " +
this.getFullYear()
);
}
static getMonthName(m) {
const months = [
"JAN",
"FEB",
"MAR",
"APR",
"MAY",
"JUN",
"JUL",
"AUG",
"SEP",
"OCT",
"NOV",
"DEC"
];
return months[m];
}
fullDate2() {
return (
ExtDate.getMonthName(this.getMonth()) +
" " +
String(this.getDate()).padStart(2, "0") +
" " +
this.getFullYear()
);
}
}
console.log(new ExtDate().fullDate()); // "MAY 01 2018"
console.log(ExtDate.getMonthName(8)); // "SEP"
console.log(new ExtDate().fullDate2()); // "MAY 01 2018"
+130
View File
@@ -0,0 +1,130 @@
class Person {
constructor(first, last) {
this.first = first;
this.last = last;
}
initials() {
return `${this.first[0]}${this.last[0]}`;
}
fullName() {
return `${this.first} ${this.last}`;
}
get lastFirst() {
return `${this.last}, ${this.first}`;
}
set lastFirst(lf) {
// very unsafe; no checks!
const parts = lf.split(",");
this.last = parts[0];
this.first = parts[1];
}
}
pp = new Person("Erika", "Mustermann");
console.log(pp); // Person {first: "Erika", last: "Mustermann"}
console.log(pp.initials()); // "EM"
console.log(pp.fullName()); // "Erika Mustermann"
pp.lastFirst = "Svensson, Sven";
console.log(pp); // Person {first: " Sven", last: "Svensson"}
class Developer extends Person {
constructor(first, last, language) {
super(first, last);
this.language = language;
}
fullName() {
// redefines the original method
return `${super.fullName()}, ${this.language} dev`;
}
}
window.dd = new Developer("John", "Doe", "JS");
console.log(dd); // Developer {first: "John", last: "Doe", language: "JS"}
console.log(dd.initials()); // "JD"
console.log(dd.fullName()); // "John Doe, JS dev"
const toJsonMixin = base =>
class extends base {
toJson() {
return JSON.stringify(this);
}
};
const countKeysMixin = base =>
class extends base {
countKeys() {
return Object.keys(this).length;
}
};
class PersonWithTwoMixins extends toJsonMixin(countKeysMixin(Person)) {
toJson() {
// redefine the method, just for the sake of it
return "NEW TOJSON " + super.toJson();
}
}
p2m = new PersonWithTwoMixins("Jane", "Roe");
console.log(p2m);
console.log(p2m.toJson()); // NEW TOJSON {"first":"Jane","last":"Roe"}
console.log(p2m.countKeys()); // 2
class ExtDate extends Date {
fullDate() {
const months = [
"JAN",
"FEB",
"MAR",
"APR",
"MAY",
"JUN",
"JUL",
"AUG",
"SEP",
"OCT",
"NOV",
"DEC"
];
return (
months[this.getMonth()] +
" " +
String(this.getDate()).padStart(2, "0") +
" " +
this.getFullYear()
);
}
static getMonthName(m) {
const months = [
"JAN",
"FEB",
// etc...
"NOV",
"DEC"
];
return months[m];
}
fullDate2() {
return (
ExtDate.getMonthName(this.getMonth()) +
" " +
String(this.getDate()).padStart(2, "0") +
" " +
this.getFullYear()
);
}
}
console.log(new ExtDate().fullDate()); // "MAY 01 2018"