JavaScript函子(随笔)
Functor(函子)
为什么要学函子?到目前为止已经学习了函数式编程的一些基础,但是我们还没有演示在函数式编程中如何把副作用控制在可控范围内、异常处理、异步操作等。
什么是Functor?
(1) 容器:包含值和值的变形关系(这个变形关系就是函数)
(2)是一个特殊的容器,通过一个普通的对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系)。
class Container{constructor(value){this._value = value;}map(fn){return new Container(fn(this._value));}
}
// this._value = 5 → this._value=6 → this._value=36
// ★map的函子运算后的返回值,作为Container的参数。
let r = new Container(5).map(x=>x+1).map(x=>x*x);
console.log(r)
上面使用的是面向对象方法( new Container(5) )调用,我们使用函数式编程方法调用:
class Container{static of(value){return new Container(value);}constructor(value){this._value = value;}map(fn){// 静态方法的调用:类名.静态方法()return Container.of(fn(this._value))}
}
let r = Container.of(5).map(x=>x+2).map(x=>x*x);
console.log(r);
总结:调用对象,返回新对象 → 新对象调用方法,操作盒子值。
JavaScript函子(随笔)相关推荐
- javascript学习随笔(编写浏览器脚本 Navigator Scripting )
在 HTML 中使用JavaScript JavaScript能以两种方式嵌入HTML: 作为语句和函数使用时,用 SCRIPT 标记 作为事件处理程序使用时,用 HTML 标记 SCRIPT 标记 ...
- JavaScript基础随笔
计算机语言指用于人与人之间通讯的语言 计算机语言的种类非常多,总的来说可以分成:机器语言,汇编语言,高级语言三大类 二进制是计算机语言的基础 通用汇编语言有两种形式:汇编语言和高级语言 汇编语言和机器 ...
- Django-Model操作
Mr.Seven 博客园 首页 新随笔 联系 订阅 管理 随笔-132 文章-153 评论-516 Django之Model操作 一.字段 AutoField(Field)- int自增列,必须 ...
- 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...
- JavaScript随笔一篇
作者:Truly 日期:2007.7.31 近期Post了不少Javascript文章,还是收到不少支持,你们的回复是我写下去的动力,谢谢你们! 刚刚研究了一下新浪的财经板块,其中对股票数据的处理真的 ...
- JavaScript函数式编程之函子
函子(Functor) 函子是一个特殊的容器,通过一个普通对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理(变形关系),容器包含值和值变形关系(这个变形关系就是函数).函数式编 ...
- JavaScript高级程序设计(第4版)学习随笔【第三章】
ECMAScript语法: 区分大小写 一切都区分大小写.无论是变量.函数名还是操作符都区分大小写 标识符(变量.函数.属性或函数参数的名称) 第一个字符必须是一个字母.下划线或美元符号$ 剩下的其他 ...
- javaScript高级程序设计-------总结随笔
一.JavaScript实现 JavaScript(JS)是由ECMAScirpt(ES).文件对象模型(DOM).浏览器对象模型(BOM)三部分组成,每部分的作用如下: ECMAScript: (3 ...
- 随笔二——JavaScript脚本语言
模块三 JavaScript脚本语言 JavaScript(简称"JS")由Netscape公司的Brendan Eich在网景导航者浏览器上首次设计实现而成.为了确保不同的浏览器 ...
最新文章
- python list同步删除
- 轻松了解“Web应用防火墙”
- ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
- .NET连接MySQL数据库方法
- 使用Adobe Lifecycle ES将若干个word合并成一个PDF
- Java中的注解是如何工作的?
- 图解算法学习笔记(三):递归
- DeepFaceLab报错,CUDA driver is insufficient 解决方法!
- 【计算机网络】ACL工作原理及标准
- 我是如何一步步拿下 Google Offer 的?
- oracle查询asm的绝对路径,查找ASM 1号文件位置
- 8.0系统手机无需Root激活XPOSED框架经验
- 高性能高频RFID电子标签全向通道设备|图书馆防盗门HX-CH-TD6760性能与安装注意事项
- unity3d通过粒子系统制作火焰效果
- 手机多控软件使用全面评测,选择更适合自己的那一款!
- Brief Summary of Bokeh Effect Rendering
- oracle 基本命令及常用的查询语句
- NISP证书换取CISP证书需要哪些条件?
- HDFS——JN扩容的正确姿势
- python 爬虫 智联招聘
热门文章
- bdg2bw(macs2的peak要修正坐标)
- 有点恐怖,这个工具能让你在 20 秒内,克隆你的声音,并转成英语!
- Tengine全面支持寒武纪思元芯片平台,共同推进AI芯片加速之路
- Word 神器 python-docx
- Windows Server 创建域、加入域、域管理
- c语言转义字符c,C语言转义字符
- Ectiture impossible,doublon dans une cle de la错误
- [转] 教师的备课主要解决哪些问题?
- 虚拟主机怎么用?香港虚拟主机搭建网站教程
- python表格绘制斜线表头_Python之ReportLab绘制条形码和二维码