day44-bind

bind的简单实现

最基本的

Function.prototype.bind = function (context) {
let self = this
return function () {
return self.apply(context, arguments)
}
}
let obj = {
id: '1'
}
let func = (function () {
console.log(this.id)
}).bind(obj)
func()
// 1

基本的PLUS

Function.prototype.bind = function () {
let self = this // 原函数
let context = [].shift.call(arguments) // this 上下文
let args = [].slice.call(arguments) // 剩余参数转化成数组
return function () {
return self.apply(context, [].concat.call(args, [].slice.call(arguments))) // 组合分别传入的参数
}
}

let obj = {
id: '1'
}

let func = function (a, b, c, d) {
console.log(this.id)
console.log([a, b, c, d])
}.bind(obj, 1, 2)

func(3, 4)
// 1
// [ 1, 2, 3, 4 ]

–end

文章作者: lmislm
文章链接: http://lmislm.com/2019/02/23/2019-02-23/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog