Roka 2020-05-25
Function.prototype.Call=function(...args){ var context=args[0]||window; var argArr=args.slice(1) context.fn=this; //相当于给context加了一个fn属性,属性值为当前函数,在对象里面定义函数相当于把函数的this改为context对象了 var result=context.fn(...argArr) delete context.fn return result; } var obj = { name: "hty", sex: "男" } function fn(age, pro) { console.log(`${this.name}是${this.sex}`)//hty是男 console.log(`今年${age}职业是${pro}`)//今年24职业是前端攻城狮 } fn.Call(obj, "24", "前端攻城狮")
Function.prototype.Apply=function(...args){ var context=args[0]||window; var argArr=args.slice(1) context.fn=this; var result=context.fn(...argArr[0]) delete context.fn return result; } var obj = { name: "hty", sex: "男" } function fn(age, pro) { console.log(`${this.name}是${this.sex}`)//hty是男 console.log(`今年${age}职业是${pro}`)//今年24职业是前端攻城狮 } fn.Apply(obj,["24", "前端攻城狮"])
Function.prototype.Bind=function(...args){ var context=args[0]||window; var args=args.slice(1) var fbind=this; fBound=function(...value){ //bind要返回函数 fbind.apply(context,args.concat(value)) } return fBound } var obj = { name: "hty", sex: "男" } function fn(age, pro,type) { console.log(`${this.name}是${this.sex}`)//hty是男 console.log(`今年${age}职业是${pro}他在${type}`)//今年24职业是前端攻城狮他在努力 } fn.bind(obj,"24", "前端攻城狮")("努力")