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