// 试用proxy 实现 管道函数 x |> fn1 |> fn2 |fn3
// 函数式编程之-函数的组合
// const add = (x)=>{
// return x+1;
// }
// const double = (x)=>{
// return x * 2;
// }
// const add100 = (x)=>{
// return x +1000;
// }
// const pipe = (...args)=>{
// return (x)=>{
// return args.reduce((pre,cur,ind,arr)=>{
// return cur(pre);
// },x)
// }
// }
// const pipeFn = pipe(add,double,add100);
// const result = pipeFn(2);
// console.log("result--->",result);
// 函数式编程之 函数的柯里化
// const add = (x)=>{
// return (y)=>{
// return x+y;
// }
// }
var checkage = min => (age => age > min);
var checkage18 = checkage(18); // 有点便函数的意思了,提高函数的试用性,减少函数的 普遍性
const isOver18 = checkage18(20);
console.log("isOver18-->", isOver18)
// proxy 实现管道函数 --- 也是利用reduce 实现代理
// const pipe = (value) => {
// const stack = [];
// const proxy = new Proxy({}, {
// get(target, prop) {
// if (prop === 'execute') {
// return stack.reduce(function (val, fn) {
// return fn(val);
// }, value);
// }
// stack.push(objFn[prop]);
// return proxy;
// }
// })
// return proxy;
// }
// var double = n => n * 2;
// var pow = n => n * n;
// const objFn = {
// double,
// pow,
// }
// pipe(3).double.pow.execute;
// 利用 proxy 实现 arr[-1] 等于 arr 数组的最后一项
const arr = [1,2,3,4,5,6,7,8];
const proxyArr = new Proxy(arr,{
get(target,propKey,receiver){
const length = target.length;
propKey = Number(propKey);
if(propKey< 0 ){
propKey = target.length + propKey
}
return target[propKey];
}
})
const re = proxyArr[-2];
console.log(`-1 ---->${re}`)