this
的指向 参考学习
//this-引用函数的执行环境对象
const handle={
test:'this在哪里',
func:function t() {
console.log(this.test);
}
}
handle.func()//有值
let a=handle.func
a()//undefined
//call的原理, 改变函数this指向, 是的调用函数可以使用方法
//拿到指针??
//需要重新思考this 的含义
//this 指向函数调用的最近的对象
// 普通函数,由于闭包函数是window执行的,所以this指向window;
// 箭头函数的this指向函数创建时的作用域。
Object.prototype.myCall=function(context,...args){
if(!context||context==null){
context=window
}else{
context=Object(context)//考虑基本类型
}
let fn=Symbol()
context[fn]=this
let res=context[fn](...args)
delete context[fn]
return res
}
Object.prototype.myApply=function(context,...args){
if(!context||context==null){
context=window
}else{
context=Object(context)//考虑基本类型
}
let fn=Symbol()
context[fn]=this
let res=context[fn](args)
delete context[fn]
return res
}
Object.prototype.myBind=function(context,...args){
const fn=this
return function(...args1){
fn.call(context,...args,...args1)
}
}
Object.prototype.myBind1=function(fn,args){
return function(){
fn.apply(args,arguments)
}
}
function TestBind(name,age) {
console.log(name,age);
}
function b(){};
let c=TestBind.myBind(b,'小明','20')
c(11)
//微任务 ->dom渲染 ->宏任务