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