1. 程式人生 > 程式設計 >JavaScript基礎之this指向

JavaScript基礎之this指向

目錄
  • this
    • 方法中
    • 物件中
      • 隱藏的this
    • 嚴格模式
    • 總結

      中this也是一件很神奇 事情,在面向物件(比如)中表示一個當前的物件引用,但是在JavaScript中this不是固定不變的,而是隨著執行環境的改變而改變。

      this

      老規矩先看程式碼:

      方法中

      function test(){
          console.log(this);
      }
      

      在這裡插入圖片描述

      物件中

      function test(){
          console.log(this);
      }
      

      在這裡插入圖片描述

      在方法中,this表示該方法所屬的物件。因為第一個是window上的方法,所以列印了window,而eat方法是Person方法,所以列印除了物件Person。

      所以可以看出單獨在控制檯使用this, 表示全域性物件。

      在這裡插入圖片描述

      隱藏的this

      在物件,可以提前宣告一個一個:

      var Person1={
          name:"張三",age:18
      }
      var Person2={
          name:"李四",http://www.cppcns.com   age:19
      }
      

      這樣寫會很麻煩,所以可以借鑑一下java類的概念,可以這樣:

      var Person=function(name,age){
          this.name=name,this.age=age
             
      }
      var Person1=new Person("張三",18);
      var Person2=new Person("李四",19);
      

      在這裡插入圖片描述

      其實在new的時候隱藏了一個return this,如果不使用new的話,發現其沒有返回這個新建的物件。

      在這裡插入圖片描述

      那麼現在補全一下看:

      var Person=function(name,this.age=age
          return this;
      }
      var Person1=new Perhttp://www.cppcns.comson("張三",18);
      var Person2=new Personwww.cppcns.com("李四",19);
      

      在這裡插入圖片描述

      這樣的話,甚至可以偽造一個this的效果:

      var Person=function(name,age){
          var that={};
          that.name=name,that.age=age
          return that;
      }
      var Person1=new Person("張三",19);
      

      在這裡插入圖片描述

      嚴格模式

      this在嚴格模式和非嚴格模式下有些神奇的情況

      function test() {
        return this;
      }
      
      # 如果前面新增"use strict" 代表是嚴格模式
      "use strict";
      function test() ARYDs{
        return this;
      }
      
      

      在這裡插入圖片描述

      這個可以看出在非嚴格模式下函式中,函式的所屬者預設繫結到 this 上。所以可以打印出全域性,但是嚴格模式下函式是沒有繫結到 this 上,這時候 this 是 undefined。

      總結

      本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多內容!