// 1.bind 的参数可以在绑定和调用的时候分两次传入
// 2.bindArgs 是绑定时除了第一个参数以外传入的参数,args 是调用时候传入的参数,将二者拼接后一起传入
// 3.如果使用 new 运算符构造绑定函数,则会改变 this 指向,this 指向当前的实例
// 4.通过 Fn 链接原型,这样 fBound 就可以通过原型链访问父类 Fn 的属性
Function.prototype.myBind = function (context) {
let that = this;
let bindArgs = Array.prototype.splice.call(arguments, 1);
function Fn() { }
Fn.prototype = this.prototype;
function FuncBind() {
let args = Array.prototype.splice.call(arguments)
return that.apply(this instanceof FuncBind ? this : context, bindArgs.concat(args))
}
FuncBind.prototype = new Fn()
return Function
}