模拟原生js的bind函数
Function.prototype.myBind = function (ctx) {
// 切割传入的参数
var argus = Array.prototype.slice.call(arguments, 1)
// 保存当前的fn函数
var fn = this
return function A() {
var newArgus = Array.prototype.slice.call(arguments)
var allArgus = newArgus.concat(argus)
// 如果是使用new 关键字来调用
if (Object.getPrototypeOf(this) === A.prototype) {
// return new fn(...allArgus)
var obj = {}
Object.setPrototypeOf(obj, fn.prototype)
fn.apply(obj, allArgus)
return obj
} else {
return fn.apply(ctx, allArgus)
}
}
}
function fn(a, b) {
return a + b
}
fn.myBind('hct', 1, 2)