【JavaScript】this指的是谁?

在函数建立的时刻,函数内部自动获取到this(另有一个arguments)。this援用的是函数功用据以实行的环境对象,因而this的值与挪用函数的体式格局有着亲昵的关联。

  1. 作为函数挪用时,this指向window

       var name = 'window';
       function sayName() {
           console.log(this.name);
       }
       sayName(); //window
  2. 作为对象的要领挪用时,this指向该对象。

       var obj = {
           name: 'object',
           sayName: function() {
               console.log(this.name);
           }
       };
       obj.sayName(); //object
       (obj.sayName = obj.sayName)(); //window
       (obj.sayName, obj.sayName)(); //window

    赋值语句和逗号运算符都邑返回背面变量的值,所今后二者相当于在全局中挪用了函数,this指向了window

  3. 挪用组织函数
    在挪用组织函数时返回thisthis指向组织函数;建立的实例中,this指向实例对象。

       function Person(n) {
           console.log(this);
           this.name = n;
           this.sayName = function() {
               return this.name;
           };
       }
       var person = new Person('hiyohoo'); //Person{}
       console.log(person.sayName()); //hiyohoo
  4. 挪用函数时指定this。在挪用函数时假如运用函数要领call()apply()bind()。则函数内部的this指向要领指定的对象。而一旦被bind()指定了this值,以后不论以何种体式格局挪用函数,其this值一直指向bind()指定的对象环境。

       var outer = {
           name: 'outer',
           inner: {
               name: 'inner',
               t: function() {
                   return this.name;
               }
           }
       };
       console.log(outer.inner.t()); //inner
       console.log(outer.inner.t.bind(outer)()); //outer
  5. 闭包中的this。若闭包在全局作用域中挪用,则this指向window。这里我们用定时器做例子:

       var name = 'window';
       var obj = {
           name: 'object',
           sayName: function() {
               setInterval(function() {
                   console.log(this.name);
               }, 1000);
           }
       };
       obj.sayName(); //window
  6. 作为dom绑定事宜的回调函数。this指向这个dom元素。

转载请说明出处:https://segmentfault.com/a/1190000004587440

文章不定期更新完美,假如能对你有一点点启示,我将不胜幸运。

    原文作者:hiYoHoo
    原文地址: https://segmentfault.com/a/1190000004587440
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞