javascript函数式编程之 函数组合(compose)

定义

在函数式编程使用过程中,组合(compose)简单来说就是把两个你喜欢的接入参数一样(最好都是一参的形式,可能过柯里化curry把多参转为一参)的函数把它们组合到一起,产生一个新的函数。如下:

var compose = function(f, g) {
  return function(x) {
    return f(g(x));
  };
};

在这里,我们把fg两个函数组合到一起,它们有共同的参数x,显然在compose组合时,函数的执行顺序是由右向左执行,先执行g(x)再执行f(g),可称之为“左倾”。使用起来如下: 继续阅读“javascript函数式编程之 函数组合(compose)”

javascript 高阶函数

定义

在js的世界里面,有一种函数,它可以接受另一个函数作为参数,这种函数,我为称之为高阶函数(Higher-order function)。我们日常使用过程中非常常见的一种形式就是回调函数,我们经常在写的带callback的函数,其实属于高阶函数;setTimeOut、setInterval可以接收函数进行异步操作;Array.sort也可以接收函数进行排序处理;进入ES6时代,Gruntjs、Gulp和webpack等打包工具的出现,我们可以大胆使用ES6/ES7的一些新的函数,如map、reduce、filter等函数

高阶函数好处

新入门的程序员通常都会疑惑将函数作为参数传递在哪些地方才有用呢?在很多程序中,都有一两个这种实例:有一些基本的算法会被编写多次,但是可能每次稍有不同。这就是发挥使用函数作为参数所长的地方。 继续阅读“javascript 高阶函数”

javascript设计模式 – 给对象绑定一个可访问的属性(defineProperty 数据绑定)

定义

在各面向对象语言里面如java,C#等语言开发中,为了提高安全性,经常要对类里面的私有变量进行get、set封装后供外部使用。而在javascript中

Object.defineProperty(obj, prop, descriptor)

也有类似getter、setter。并且可以给getter和setter绑定相应的事件处理。这样,每当prop发生改变(set)s或者执行被读取值(get)时就自动执行已绑定的相应的事件处理函数或者方法。 继续阅读“javascript设计模式 – 给对象绑定一个可访问的属性(defineProperty 数据绑定)”

javascript设计模式 – 观察者模式

定义

观察都模式定义了对象间的一对多依赖关系,因此当一个对象的状态发生改变,所有其他有依赖关系的对象将自动被通知和更新

总结

观察都模式提供了一个订阅模型,当对象订阅了一个事件后,当事件发生后将会被通知。这个模式是包括javascript在内的事件驱动编程的基石。观察都模式使用面向对象设计变得容易,也促进解藕。

当创建网页应用程序你可能要写很多事件处理函数,当发生特定的事件,这些函数将会被触发。这些通知有选择地接收一个关于这个事件的带明细的事件参数(比如:点击事件中将有鼠标的x和y的位置)。

这个javascript事件和事件处理函数范例就是一个观察都模式,它的另一个叫法是发布/订阅模式。 继续阅读“javascript设计模式 – 观察者模式”

javascript设计模式 – 依赖注入

定义

所有做过.net、java或者php开发的人都应该听过依赖注入dependency injection(DI)或者inverse of control(IOC)控制反转,依赖注入是一种软件设计模式,它让人移除硬生生的写死的依赖关系,让人可以修改它们。依赖可以通过构造函数、定义方法或者设置属性来注入对象。

依赖注入好处

减小对象与依赖之间的藕合关系。
不需要对原代码进行修改,直接可以应用到当前代码。
有助于把客户与设计隔离开,减小设计改变带来的影响。
让系统不用修改当前代码就可以重新配置。
可以进行并行或者独立开发。
让代码更好维护和测试,因为用其他依赖包或者模版代替的话依赖的影响可以被消除。 继续阅读“javascript设计模式 – 依赖注入”