lianjianbo / blog

0 stars 0 forks source link

javascript中this用法summary #3

Open lianjianbo opened 5 years ago

lianjianbo commented 5 years ago

javascriptthis的用法:

基本含义:this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。也就是所谓的this所代表的对象要看实际运行时候的上下文环境。下面有几个实例。

eg1:

var a=function(){
                  return this;
               }

此时,a是一个全局的函数表达式,外面没有对象,所以其值默认就是最外面的window对象。页面里面所有的对象和内容都是window对象的子孙,所以上面的this指向值其实是window
从这个,可以总结: 如果外部没有对象定义,this指向默认的window对象。

eg2:

var person={
             name:"张三",
             sayThis:function(){
                return this;
              }
          }

这次把相同的函数声明,放到一个对象里面,从测试结果可以看出,this此时已经不指向外侧的window了,已经指向定义其的外部对象了。这里就是person 从这个,可以总结: 如果外部有对象定义,this指向其外部的对象。

eg3:

var person={
                   name:"123",
                 returnThis:function(){
                     return this;
                 }
             }
            var man={
                name:"456",
                getNowThis:this,
                sayThis1:person.returnThis(),
                sayThis2:person.returnThis
            }

从这个,可以总结: this值指向的对象确实如大家所说,看实际运行时候的环境变量。this值相应的也会有所改变。

eg4:

var arr=[

           function(){     return this;     } ,
            2,
            3,
            4          
      ]

由上面的例子可以看出,数组的this值也指向该this,因此得出下面的结论:

     数组也有`this`,因为数组本来就是`object`对象的一种。遵从于`this`指向对象的结论。

eg5:

function Person(){
     this.age=25;
     this.title="title";
      this.sayThis=function(){
         return this;
     }
  }
var person1=new Person();
 Person.age                      // undefined
 person1.age                     //  25
 person1.sayThis() .title        //  "title"
 person1.sayThis()==Person       // fasle
 person1.sayThis()==person1      // true

在构造函数里面也会存在this 这里首先发现,函数里面的this并没有指向函数本身,也没有指向外面的window对象等。要理解这个this被赋值的过程,关键是注意那个new操作字符串。 这种Person()其实是一种构造函数定义对象的方法。经历了四个步骤 (1)创建一个新对象 (2)将构造函数的作用域赋给新对象。(因此this就指向了这个新对象); (3)执行构造函数里面的代码(为这个新对象添加属性) (4)返回新对象。 因此得出结论: 构造函数的this指向并不是构造函数本身,而是指向相应的实例对象,再次证明了this指向对象 拓展: 对于需要用到局部变量的this的时候,需要把函数(function)去掉,用()=>{}再去调用this或者也可以是这样(function (){}).bind(this)

总结: 1、this指向的一定是一个对象。 2、在外面没有对象时候,this指向默认的window对象 3、外部有对象时候,this指向该对象 4、对象调用其他对象的this,要看具体的this运行环境来决定this指向的是哪个对象。 5、数组里面的this对象也会指向数组本身,数组也是对象的一种。 6、构造函数里面的this对象,指向是实例对象本身,而不是构造函数。