https://www.youtube.com/watch?v=aQkgUUmUJy4 http://latentflip.com/loupe/ https://jsonplaceholder.typicode.com/
https://github.com/chrisvfritz/vue-enterprise-boilerplate https://github.com/chrisvfritz/7-secret-patterns
| function createCalcFunction(n){ | |
| return function(){ | |
| console.log(1000*n) | |
| } | |
| } | |
| const calc = createCalcFunction(42) // no calc, just initialization | |
| calc() // prints 42000 | |
| function bind(context, fn){ | |
| return function(...args){ | |
| fn.apply(context, args) | |
| } | |
| } |
| /* | |
| * Arrow functions are different than traditional functions but do share some common characteristics. For example: | |
| * | |
| * The typeof operator returns “function” for arrow functions. | |
| * Arrow functions are still instances of Function, so instanceof works the same way. | |
| * The methods call(), apply(), and bind() are still usable with arrow functions, though they do not augment the value of this. | |
| * The biggest difference is that arrow functions can’t be used with new, attempting to do results in an error being thrown. | |
| */ | |
| function hello (){ | |
| console.log("Hello", this) | |
| } | |
| let hello2 = function (){ | |
| console.log("Hello2", this) | |
| } | |
| const person = { | |
| name: "Vladimir", | |
| age: 25, | |
| sayHello: hello, | |
| sayHello2: hello2, | |
| sayHelloWindow: hello.bind(window), | |
| sayHelloWindow2: hello.bind(this), | |
| sayHelloWindow3: hello.bind(document), | |
| } | |
| person.sayHello() // `this` is person | |
| person.sayHello2() // `this` is window | |
| person.sayHelloWindow() // `this` is window | |
| person.sayHelloWindow2() // `this` is window | |
| person.sayHelloWindow3() // `this` is document | |
| function work(a,b){ | |
| console.log(this, a,b) | |
| } | |
| work.bind(document, "+","-")() // sets context and then you can call f-n which which prints document, + - | |
| work.call(document, "+","-") // immediatelly sets context and calls f-n, which prints document, + - | |
| work.apply(document, ["+","-"]) // immediatelly sets context and calls f-n, which prints document, + - | |
| console.group("sadad") | |
| console.log("----") | |
| console.groupEnd() |
| const person = Object.create( | |
| { //prototype object | |
| calculateAge(){ | |
| console.log('Age', new Date().getFullYear() - this.birthYear) | |
| } | |
| }, | |
| { | |
| name: { | |
| value: 'Vladimir', //default value | |
| enumerable: true, //seen in for-in, default: false | |
| writable: true, //can change value, default: false | |
| configurable: true, // can remove attributte, default: false | |
| }, | |
| birthYear: { | |
| value: 1993, | |
| enumerable: false, | |
| writable: false, | |
| configurable: false, | |
| }, | |
| age: { | |
| get(){ | |
| return new Date().getFullYear() - this.birthYear | |
| }, | |
| set(value){ | |
| document.body.style.background = 'red' | |
| console.log('Set age', value) | |
| } | |
| } | |
| } | |
| ) | |
| person.calculateAge() |
| const p = new Promise(function(resolve, reject){ | |
| setTimeout(()=>{ | |
| console.log("Preparing data...") | |
| const backendData = { | |
| server: 'aws', | |
| port: 2000, | |
| status: 'working' | |
| } | |
| resolve(backendData) // resolving and sending data to then | |
| }, 2000) | |
| }) | |
| p.then(data =>{ | |
| console.log("promise 1 resolved", data) | |
| return new Promise((resolve, reject)=>{ | |
| setTimeout(()=>{ | |
| data.modified = true | |
| resolve(data) | |
| }) | |
| }, 2000) | |
| }).then(clientData => { | |
| console.log('Data received', clientData) | |
| clientData.fromPromise = true | |
| return clientData | |
| }).then(data=>{ | |
| console.log('Modified', data) | |
| }).catch().finally() |
| const person = new Object({ | |
| name: "Maxim", | |
| age: 25, | |
| greet: function(){ | |
| console.log("Greet!") | |
| } | |
| }) | |
| Object.prototype.sayHello = ()=>console.log('Hello!'); | |
| const lena = Object.create(person); | |
| lena.name = 'Elena' | |
| const str = new String('I am string') | |
| const array = [2,3,4,5] | |
| Array.prototype.multBy = function(n){ | |
| return this.map((i)=>i*n) | |
| } | |
| array.multBy(2) |