SOURCE

Function.prototype.myBind=function(context){
    if(typeof this !=="function"){
        throw new TypeError("this is not a function");
    }
    // 获取this指向,获取参数,修改context
    context = context || window;
    const _this = this;
    const args = Array.from(arguments).slice(1);
    return function F(){
        // 因为函数有两种调用方式:直接调用和使用new调用
        // 而通过new进行调用的函数,其原型链上会包括这个返回的F
        if(this instanceof F){
            // 通过new出来的函数 在这里进行调用
            return new _this(...args);
        }else{
            // 直接调用的话,需要修改this
            return _this.apply(context,...args);
        }
    }
}
function print(name,age){
    if(name&&age){
    this.name = name;
    this.age = age;
    }
    console.log(`I am ${this.name},I am ${this.age} years old!`);
}
let obj = {
    name:"ax",
    age:20
}
// 使用obj调用
let f = print.myBind(obj)();
// console.log("test");
// 使用new进行调用
let test = new print("kime",19);
console 命令行工具 X clear

                    
>
console