含义:

    1. 函子是一个容器,始终维护内部的一个值,且不会对外公布这个值
    2. 对外会提供一个map方法,该方法接收一个处理内部值的回调函数,调用map方法最终返回一个新函子
    3. 每个函子具有链式调用,每当调用一个map,会生成一个新的函子 ```javascript /**
      • 函子:
      • 函子是一个容器,会始终维护内部里的值,且这个值不会对外公布,
      • 会对外提供一个map方法,该方法接受一个用于处理容器内部值的方法,最终调用map方法返回一个函子
      • 函子可以存在多种,并不是唯一的,由于暴露出map方法,该方法返回的一个函子,所以map接受不同的处理值的函数,就会产生不同的函子
      • 每个函子具有循环链式调用,可以反复调用map,因此在不同map中处理容器里的值,非常灵活
      • map始终会返回新的函子 */

    // 函子 // class Container { // constructor(values) { // // this._value: 容器的值 // this._values = values; // } // // fn: 维护值的方法 // map(fn) { // // 返回一个函子 // return new Container(fn(this._values)) // } // } // const box = new Container(10).map(v => v + 1).map(v => v * v) // console.log(box) // Container {_value: 121}

    class Container { static of (values) { return new Container(values) } constructor(values) { this._values = values; } map(fn) { return Container.of(fn(this._values)); } } const box = Container.of(10).map(v => v + 1).map(v => v * v); console.log(box) // Container {_value: 121}

    1. 当创建函子时,如果传递是值是null或者undefined时,会发生什么?
    2. ```javascript
    3. class Container {
    4. static of (values) {
    5. return new Container(values)
    6. }
    7. constructor(values) {
    8. this._values = values;
    9. }
    10. map(fn) {
    11. return Container.of(fn(this._values));
    12. }
    13. }
    14. // 演示创建函子时传递null或者uundefined
    15. Container.of(null).map(x=> x.toUpperCase()) // error:Cannot read property 'toUpperCase' of null

    总结:

    1. 函数式编程的运算不会直接操作值,而是由函子来完成
    2. 函子是一个具有map契约的对象
    3. 函子对外抛出的方法是处理内部值的唯一途径
    4. 调用map会生成新的函子,具有链式调用的特性
    5. 无法处理传递空值时初始化函子的报错