JS版依赖注入

介绍依赖注入是什么以及一个小例子。

平时经常使用的bind()、call()和apply()就是依赖注入,可以先依靠这三个函数来体会一下依赖注入究竟是什么。

然后可以看一下知乎上的这个回答:跳到知乎回答

后来我又看了一篇文章,但是并没有讲得特别详细。
在这里增加一些注释和记录学习的知识点。

// 主要看看这段代码
DI.prototype.inject = function (func) {

  var deps = /^[^(]+\(([^)]+)/.exec(func.toString());
 //  构建参数绑定数组
  deps = deps ? deps[1]
    .split(/\s?,\s?/)
    .map(function (dep) {
      return this.dependency[dep];
    }.bind(this)) : [];

  // 通过apply将依赖参数传入函数
  return function () {
    return func.apply(this, deps);
  };

}

exec()检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。这段正则使用了分组,所以deps[0]匹配整个正则表达式,deps[1]匹配([^)]+)

因为匿名函数里面的this不是DI

function (dep) {
  return this.dependency[dep];
}

所以需要用bind(this)注入this给匿名函数。
也可以用如下写法

var that = this;  // 在外面用一个变量指向this
deps = deps ? deps[1]
  .split(/\s?,\s?/)
  .map(function (dep) {
    return that.dependency[dep];
  }) : [];
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值