美文网首页
this解析

this解析

作者: 李欢li | 来源:发表于2018-06-06 05:58 被阅读0次

究竟什么是this?

this是JavaScript中的一个关键字, 它的值取决于他所在的函数如何被调用. 下面是this可以获得新值的6中不同的方式:

this在全局范围内

this在对象的构造函数内

this在对象的方法内

this在一个简单的函数内

this在箭头函数内

this在一个事件侦听器内

This在全局范围内

当this在任何函数外面被调用时, 也就是说在全局环境中被调用, 在浏览器中, 它默认指向Window 对象 .

console.log(this)// Window

This在对象的构造函数内

当你使用new关键字创建一个对象的新的实例时, this关键字指向这个实例 .

functionHuman(age){

      this.age=age;

}

let greg=newHuman(22);

console.log(greg);// this.age = 22

This在对象的方法内

在对象的任何方法内的this都是指向对象本身 .

let o={

sayThis(){

     console.log(this);

}

}

o.sayThis()// o

This在一个简单的函数内

在浏览器中, 简单函数里面的this总是被指向Window. 即使你在对象的方法中调用一个简单函数, 在这个简单函数里面的this也是指向Window.

function simpleFunction(){

     console.log(this);

}

const  o={

         sayThis(){

                   simpleFunction();

          }

  }

simpleFunction();// Window

o.sayThis();// Window

This在箭头函数中

函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。this对象的指向是可变的,但是在箭头函数中,它是固定的

function foo(){

      setTimeout(()=>{

                console.log('id:',this.id);},100);

               }

var id=21;

foo.call({id:42});// id: 42

上面代码中,setTimeout的参数是一个箭头函数,这个箭头函数的定义生效是在foo函数生成时,而它的真正执行要等到100毫秒后。如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id: 42}),所以输出的是42。

箭头函数可以让setTimeout里面的this,绑定定义时所在的作用域,而不是指向运行时所在的作用域。

This在事件侦听器内

在事件侦听器内, this被指向的是触发这个事件的元素:

相关文章

网友评论

      本文标题:this解析

      本文链接:https://www.haomeiwen.com/subject/nibapxtx.html