这篇文章将为大家详细讲解有关这的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>一:全局执行强>
console.log(这个);//窗口
可以看出在全局作用域中这指向当前的全局对象窗口。
<强>二:函数中执行强>
1。非严格模式中
函数func () { console.log(这个); } func ();//窗口
2。严格模式中
“使用strict"; 函数func () { console.log(这个); } func ();//定义
<强>三:作为对象的方法调用强>
当一个函数被当作一个对象的方法调用的时候,这指向当前的对象obj:
var obj={ 名称:& # 39;kk # 39; 函数:函数(){ console.log (this.name); } } obj.func ();//kk
如果把对象的方法赋值给一个变量,调用该方法时,这指向窗口:
var obj={ 名称:& # 39;kk # 39; 函数:函数(){ console.log(这个); } } var=obj.func测试; 测试();//窗口
<强>四:作为一个构造函数使用强>
在JS中,为了实现类,我们需要定义一些构造函数,在调用一个构造函数的时候加上新这个关键字:
函数人(名字){ this.name=名称; console.log(这个); } var p1=新人(& # 39;kk # 39;);//人
此时,这指向这个构造函数调用的时候实例化出来的对象。
当然了,构造函数其实也是一个函数,若将构造函数当做普通函数来调用,这指向窗口:
函数人(名字){ this.name=名称; console.log(这个); } var p2=人(& # 39;mm # 39;);//窗口
<强>五:在定时器中使用强>
setInterval(函数(){ console.log(这个); },2000)//窗口 setTimeout(函数(){ console.log(这个); },0)//窗口
如果没有特殊指向(指向更改请看下方:怎么改变这的指向),setInterval和setTimeout的回调函数中这个的指向都是窗户。这是因为JS的定时器方法是定义在窗口下的。
<强>六:箭头函数强>
在全局环境中调用:
var func=()=比;{ console.log(这个); } func ();//窗口
作为对象的一个函数调用:
var obj={ 名称:& # 39;hh # 39; 函数:函数(){ setTimeout(函数(){ console.log(这个); },0) } } obj.func ();//窗口 var obj={ 名称:& # 39;hh # 39; 函数:函数(){ setTimeout(()=比;{ console.log(这个); },0) } } obj.func ();//obj
不难发现,普通函数作为对象的一个函数被调用,这指向窗口,箭头函数作为对象的一个函数被调用,这指向定义时所在的对象,也就是函数中的这一点,即obj。
箭头函数中这样的值取决于该函数外部非箭头函数的这的值,且不能通过叫(),()和应用绑定()方法来改变这样的值。
<强>七:调用,应用,结合强>
电话:
乐趣。调用(thisArg [, __arg1[)最长[…]]])
它会立即执行函数,第一个参数是指定执行函数中这样的上下文,后面的参数是执行函数需要传入的参数;
:
乐趣。应用(thisArg [argsArray])
它也会立即执行函数,第一个参数是指定执行函数中这个的上下文,第二个参数是一个数组,是传给执行函数的参数(与调用的区别);
绑定:
var foo=乐趣。绑定(thisArg [, __arg1)最长[…]]]);
它不会执行函数,而是返回一个新的函数,这个新的函数被指定了这个的上下文,后面的参数是执行函数需要传入的参数;
我们来看个示例:
函数人(姓名、年龄){ this.name=名称; 这一点。年龄=年龄; console.log(这个); } var obj={ 名称:& # 39;kk # 39; 年龄:6 }; 的人。调用(obj, & # 39; mm # 39;, 10);//obj,{名称:“mm",年龄:10} 的人。应用(obj, [& # 39; mm # 39; 10]);//obj,{名称:“mm",年龄:10} var p1=人。绑定(obj & # 39; mm # 39;, 10) var p2=new p1 (); {//人的名字:“mm",年龄:10}
在这个示例中,调用,应用和绑定的这都指向了obj,都能正常运行;调用,应用会立即执行函数,调用和应用的区别就在于传递的参数,电话接收多个参数列表,应用接收一个包含多个参数的数组;不绑定是立即执行函数,它返回一个函数,需要执行p2才能返回结果,结合接收多个参数列表。