依赖注入

依赖注入

function DI(deps) {
    this.deps = deps
}
DI.prototype.inject = function (func) {
    // 取参数名
    var self = this
    var args = /^[^(]+\(([^)]+)/.exec(func.toString())

    args = args ? args[1].split(',').map(function (arg) {
        return self.deps[arg.trim()]
    }) : []

    return function () {
        return func.apply(self, args)
    }
}

// demo
var deps = {
    dep1: function () { return 'dep1' },
    dep2: function () { return 'dep2' },
    dep3: function () { return 'dep3' },
}
var di = new DI(deps)

var myFunc = di.inject(function (dep2, dep1, dep3) {
    return [dep1(), dep2(), dep3()]
})

柯里化

防抖和节流

防抖

使用场景: 联想搜索时避免立即触发查询.

节流

使用场景: 滚动时触发接口请求.

深拷贝

继承

Last updated