js设计模式--职责链模式(9)

  1. 问题情境:
    充斥多层嵌套的分支,代码繁复
  2. 解决思路
    把函数从大化小,每一层抽象成一个方法,方法间解耦。
  3. 具体做法
    1.链表结构,每一层是一个节点,包含该层方法和指向下一层的指针。用两个函数分别指定下一层函数(函数1)和调用函数(函数2)。难点和精髓是,函数2(passRequest)是个递归函数,先调用this,若this无法解决则进入递归,并把下一级节点作为this传递进去。
	Chain.prototype.passRequest = function(){
		var ret = this.fn.apply (this, arguments);//调用本层函数
		if (ret === "nextSuccessor"){
		//传递给下一层
		return this.successor && this.successor.passRequest.apply(this.successor, arguments);
		return ret;
	}

2.用AOP实现职责链
神奇的after函数:

 Function.prototype.after = function (fn) {
    var self = this;
    return function () {
      var ret = self.apply(this, arguments);
      if (ret === 'nextSuccessor') {
        return fn.apply(this, arguments);
      }

      return ret;
    }
  }

var order = a.after(b).after©;
order(arguments)即可即可a(arguments)–>b(arguments)–>c(arguments顺序执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值