这的使用示例

  介绍

这篇文章将为大家详细讲解有关这的使用示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>一:全局执行

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才能返回结果,结合接收多个参数列表。

这的使用示例