1、this指针指向module.exportsconsole.log("Thisintheglobalsystempointstomodule.exports");控制台日志(这个);//{}this.obj="HelloWorld";console.log(this.obj);//你好世界console.log(global.obj);//undefinedconsole.log(module.exports.obj);//HelloWorldconsole.log("----------------------------------------------------"+"\n\n");2.this指针指向全局对象console.log("函数中的this指向全局对象,与全局中的this不是同一个对象");functionfn(){this.obj="好好好好学习!daydayup!";}fn();console.log(this);//{obj:'HelloWorld'}console.log(this.obj);//HelloWorldconsole.log(global.obj);//"好好好好学习!daydayup!"console.log("-----------------------------------------------------"+"\n\n");console.log("函数中this指向全局对象,全局objectthisisnotthesameobject");functionfn1(){functionfn2(){this.msg="我爱你";}fn2();console.log(this);//globalconsole.log(this.msg);//“我爱你”console.log(global.msg);//"我爱你"}fn1();console.log("----------------------------------------------------"+"\n\n");3.在构造函数中,this指向它的实例,而不是globalfunctionFn3(){this.year=1998;}letfn3=newFn3();console.log(this);//{obj:'HelloWorld'}console.log(fn3.year);//1998console.log(global.year);//undefinedconsole.log("----------------------------------------------------"+"\n\n");四、this指针显式、隐式传递和绑定console.log("显式传递this");letKirito={};functionperson(name,sex,age,addr,salary){this.name=name;this.sex=sex;this.age=age;this.addr=addr;this.salary=salary;}//这里传入桐人就是this指针指向的对象//使用.call()显式传递person.call(Kirito,"Kirito","Male",18,"SAO",999999999);console.log(Kirito);console.log("--------------------------------------------------------"+"\n\n");console.log("隐式传递");letAusua={name:"Asuna",sex:"female",age:18,addr:"SAO",salary:999999999,func(){console.log(this);},func_bind:function(){console.log(this);}.bind("bind")};Ausua.func();console.log("------------------------------------------------------"+"\n\n");console.log("强行绑定这个指针");letfunc=function(){console.log(this);}.bind(Kirito);func();console.log("-------------------------------------------------------"+"\n\n");console.log("注意:\n\t这里的func在原来的对象的基础,使用bind绑定this指针,生成新的函数对象!");func=function(){console.log(this);};//注意:此时func绑定到对象后,func变量的对象引用指针指向func.bind(Kirito);func();//注意:此时func绑定对象后,func变量的对象引用指针指向绑定func=func.bind(Kirito);func();console.log("-------------------------------------------------------"+"\n\n");五、this指针显隐传递绑定的优先级letpriority=function(){console.log(this);};console.log("绑定优先于隐式");Ausua.func_bind();console.log("---------------------------------------------------"+"\n\n");console.log("绑定优先于显式");priority=priority.bind("绑定");priority.call("显式");priority();console.log("------------------------------------------------------“+”\n\n");console.log("显式优先于隐式");Ausua.func.call("显式");console.log("-------------------------------------------------------"+"\n\n");console.log("结论:优先级:绑定>显示>隐式");
