其他分享
首页 > 其他分享> > js之this

js之this

作者:互联网

定义:this代表的是函数运行时所在的对象,一般来说,哪个对象调用它,它就指向谁:

 var name="hmm";         function fn(){             console.log(this.name);         }         fn();//输出结果即为hmm,此时调用它的windows对象,故其指向windows,this.name就相当于windows.name,即全局变量name,值为hmm this指向的问题: var name="韩梅梅"; var xm={     name:"小明",     sayHi:function(){         setTimeout(function(){             console.log(this.name);         },0)     } } var ll={     name:"李雷",     sayHi:sayHi } function sayHi(){     console.log(this.name); } sayHi();//结果为韩梅梅,由window对象调用的sayHi xm.sayHi();//结果为韩梅梅,定时器内的函数是由windows对象调用的 setTimeout(ll.sayHi,100);//结果为韩梅梅,调用定时器里的ll.sayHi方法的是window对象,故ll.sayHi里的this指的是window setTimeout(function(){     ll.sayHi(); },200)//结果为李雷,window调用的是定时器的function,函数体内,调用sayHi的实质上是ll对象,this指向李雷 更改this指向的三种方法  --之call方法 var ll={     name:"李雷",     car:function(){         console.log(this.name+"can drive car");     } } var hmm={     name:"韩梅梅" } ll.car.call(hmm)//结果为韩梅梅can drive car。 call将ll对象的car方法指向更改为了hmm对象,即此时call中的this指的不再是ll,而是hmm call()参数问题 当ll对象的car方法有参数时,hmm对象想借ll的car方法就必须带着car需要的参数一起去了,规定参数以逗号分隔,写在借用对象后: call(hmm,参数一,参数二,...) --之apply方法 同call作用相同,但两者的参数的写法不一样,此种方法的多个参数需要用中括号包裹起来: apply(hmm,[参数一,参数二,...]) --之bind方法 不同于前两者,bind方法调用后返回的是一个函数,想要借用别人有的,需要主动调用才可 上述代码hmm对象调用ll对象的car方法必须先把ll对象里的this指针改为hmm才可,然后再主动调用返回的bind函数: var fn=ll.car.bind(hmm); fn();//结果为韩梅梅can drive car

 

标签:调用,name,car,ll,js,hmm,sayHi
来源: https://www.cnblogs.com/zsy1006/p/16406971.html