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

夯实JS基础(一):this指向题与经典面试题

时间:2023-04-02 21:07:56 HTML

很多高级编程语言都会给一个新创建的对象赋值一个指向自己的指针,比如JAVA和C++中的this指针,python中的self,JavaScript中也有this指针,虽然它的指向可能比较复杂,但是this指向的永远只能是一个对象。1.在一般的函数方法中使用this来引用全局对象functiontest(){ this.x=1  console.log(this.x)}test()//12.作为对象method调用,this指的是上级对象,和数组一样varobj={name:"obj",func1:function(){console.log(this)}}obj.func1()//this--->objdocument.getElementById("div").onclick=function(){console.log(this)};//this--->div3.该函数作为内置窗口函数的回调函数被调用:this指向窗口对象(setInterval、setTimeout等)window.setInterval(function(){console.log(this)},300)4.this作为构造函数调用,引用new函数test(){  this.x=1}varo=newtest()alert(o.x)实例化的对象//15.apply,call,bind改变函数的调用对象,该方法第一个参数为改变后调用该函数的对象varx=0;functiontest(){  console.log(this.x)}varobj={}obj.x=1obj.m=testobj.m.apply()//0,当apply()的参数为空时,全局对象obj.m默认调用。申请(对象);//1六、匿名函数的执行环境是全局的,this对象通常指向window对象varname='TheWindow';varobj={name:'Myobj',getName:function(){returnfunction(){console.log(this.name);};}};obj.getName()();//'TheWindow'纸上谈兵很浅,我知道它必须要做,让我们一起做吧看看这个经典的面试题varx=3;vary=4;varobj={x:1,y:6、getX:function(){varx=5;returnfunction(){返回this.x;}();},getY:function(){变量y=7;返回this.y;}}console.log(obj.getX())//3console.log(obj.getY())//6varname="thewindow";varobject={name:"我的对象",getName:function(){returnthis.name;}}object.getName();//"我的对象"(object.getName)();//"我的对象"(object.getName=object.getName)();//"thewindow",函数赋值会改变内部的this指针,这就是为什么在React类组件中绑定事件处理程序需要设置this的原因;变量a=10;变量对象={a:20,fn:function(){vara=30;console.log(this.a)}}obt.fn();//20ob??t.fn.call();//10(obt.fn)();//20(obt.fn,obt.fn)();//10新的obt.fn();//undefinedfunctiona(xx){this.x=xx;returnthis};varx=a(5);vary=a(6);console.log(x.x)//undefinedconsole.log(y.x)//6<标题持续更新中...>