当前位置: 首页 > Web前端 > HTML

这指向问题的经典场景

时间:2023-04-02 23:40:22 HTML

常见THIS场景1.以函数形式调用,this指向windowfunctionfn(m,n){m=2;n=3;console.log(this.m,n);//未定义,this指向window}fn();2.以方法的形式调用,this指向调用该方法的对象box.onclick=function(){this.style.backgroundColor="red";//this指向盒子,盒子颜色为红色}3.构造函数调用,this指向实例对象functionPerson(age,name){this.a=age;this.b=名称;console.log(this)//这里this分别指向Person的实例对象p1p2}varp1=newPerson(18,'zs')varp2=newPerson(18,'ww')consoleoutput:Person{a:18,b:"zs"}Person{a:18,b:"ww"}4、使用window对象方法时,指向windowvarbox=document.getElementById("box");box.onclick=function(){setTimeout(function(){this.style.backgroundColor="yellow"},1000)}//报错,因为setTimeout是window的一个方法。更改错误使框颜色为黄色varbox=document.getElementById("box");box.onclick=function(){varme=this;//box调用此方法,此时this指向框,并且这个操作把指向盒子的this赋值给了我,得到的me指向了这个盒子},1000)}5.多场景变化th是指向box.onclick=function(){functionfn1(){console.log(this);}fn1();//事件触发fn1,在函数内部,以函数的形式调用this仍然指向windowconsole.log(this);//事件处理函数中的this,谁触发事件,this就指向谁};控制台输出:Window{postMessage:?,blur:?,focus:?,close:?,parent:Window,…}box

box.onclick=function(){varme=这个;函数fn1(){console.log(me);}fn1();//事件触发fn1,me指向box,所以console为boxconsole.log(this);//事件处理函数中的this,谁触发事件,this指向谁};控制台输出:box
box
6.调用并应用将其更改为指向varperson={name:"lili",age:21};functionaa(x,y){console.log(x,y);console.log(this.name);}aa.call(person,4,5);consoleoutput//45//lili使用call,this指向紧跟在call元素后面的一个,this指向person