SOURCE

Function.prototype.myBind = function(context){
    // 判断类型
    if(typeof this !=='function'){
        throw new TypeError("this is not a function");
    }
    // 获取参数和当前的this指针
    const args = Array.from(arguments).slice(1);
    const _this = this;
    return function F(){
        // 以instanceof方法来判断当前的调用形式:
        // 如果是通过new进行调用的,那么能在this中找到其原型
        // 因为new运算符会创建一个新对象并将其__proto__属性指向函数的
        // prototype上。
        if(this instanceof F){
            return new _this(...args);
        }else{
            return _this.apply(context,...args);
        }
    }
}

function sayHello(){
    console.log(this);
    console.log(this.name);
    console.log(...arguments);
}

let obj = {
    name:"ax",
    age:20
}
let say = sayHello.myBind(obj);
say('沉默的真相')
console 命令行工具 X clear

                    
>
console