Cheap currying,
let logger = store => next => action => {
// middleware
}
// becomes
var logger = function logger(store) {
return function (next) {
return function (action) {
// middleware
};
};
};
// simple make logger
let makeLogger = message => error => {
console.log(message,error);
}
let myLogger = makeLogger('message');
myLogger('you blew it');
// es5
'use strict';
var makeLogger = function makeLogger(message) {
return function (error) {
console.log(message, error);
};
};
var myLogger = makeLogger('message');
myLogger('you blew it');Destructing for defaults/extend
let simpleExtend = ({obj}) => {
return {
...obj
,myNew: () => { console.log('hi') }
}
}
const src = {
name: 'evan'
};
const dest = simpleExtend(src);
dest.myNew();
// becomes
'use strict';
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var simpleExtend = function simpleExtend(_ref) {
var obj = _ref.obj;
return _extends({}, obj, { myNew: function myNew() {
console.log('hi');
}
});
};
var src = {
name: 'evan'
};
var dest = simpleExtend(src);
dest.myNew();Shallow copies
let src = {
prop: '1',
nested: {
obj: 'prop 2'
}
};
let clone = {...src};
let copy = src;
console.log(clone === src);
console.log(copy === src);
console.log(clone.obj === src.obj) // watch out for deep objects
/// becomes
'use strict';
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var src = {
prop: '1',
nested: {
obj: 'prop 2'
}
};
var clone = _extends({}, src);
var copy = src;
console.log(clone === src);
console.log(copy === src);
console.log(clone.obj === src.obj);
///class fiddlings
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.sayHello = () => { // not on the prototype
console.log(firstName, 'is am saying hello')
}
}
sayName() { // on the prototype
console.log(this.firstName, this.lastName)
}
}
const evan = new Person('evan', 'schultz');
evan.sayName();
const bob = new Person('bob', 'doe');
bob.sayName();
Person.prototype.sayName = function() {
console.log("Hi", this.firstName, this.lastName);
}
evan.sayName();
bob.sayName();
evan.sayName = function() {
console.log("Hi there", this.firstName, this.lastName);
}
evan.sayName();
bob.sayName();
evan.sayHello();
bob.sayHello();
evan.sayHello = () => { console.log('no') }
evan.sayHello();
bob.sayHello();