// 第一种:闭包存储,遍历执行
function compose1 (arr) {
return (param) => {
for (let fn of arr) {
param = fn(param);
}
return param;
}
}
// 第二种:递归嵌套,依次执行
function compose2 (arr) {
return arr.length <= 1 ? arr[0] : (...args) => compose2(arr.slice(1))(arr[0](...args))
}
// 第三种:累加嵌套,依次执行,跟第二种相似
const compose3 = (arr) => arr.reduce((res, cur) => (...args) => cur(res(...args)));
function a (p) {
return p + 1;
}
function b (p) {
return p + 6;
}
function c (p) {
return p * 2;
}
// 第四种:注意与第三章的区别
const compose4 = (arr) => arr.reduce((res, cur) => (...args) => res(cur(...args)));
const fn = compose4([a, b,c,d])
console.log(fn(1))
**聚合可以把类本身属性和方法聚合到目标类的成员本身或目标的原型对象上
聚合也可以类的原型对象上的方法【通常是方法】聚合到目标类的原型对象上。
类本身一般放属性,方法一般放在原型对象上。
**