這次再忘什么是this,我就直播吃電腦

我們都知道,調用一個函數一共有四種調用模式:

  • 方法調用模式

    • 定義:當一個函數被保存為對象的一個屬性的時候,這個函數被稱為方法。
    • 此時的this:當一個方法被調用的時候,this綁定到該對象上。
    • 舉例子
      var obj = {
      name:"harrisking",
      foo: function(){
      console.log(this.name);//harrisking
      //這里的this指的就是obj;
      }
      }
  • 函數調用模式

    • 定義:當一個函數并非一個對象的屬性時,則這個函數就是一個函數來調用的。
    • 此時的this:以此模式調用函數時,this被綁定到全局對象(window)。
    • 舉例子
      var a = function(){
      console.log(this.b())
      }
      var b = function(){
      console.log("馬達,又躺槍!")
      }
      a();//"馬達,又躺槍!"
  • 構造器調用模式

  • 定義:如果一個函數前面帶上一個new來調用,則該函數就是作為構造函數來調用的。

    • 這里要補充一個重要的知識點——new到底做了些啥?
      當一個構造函數前加上new的時候,背地里來做了四件事:
      1,生成一個空的對象并將其作為 this;
      2,將空對象的proto 指向構造函數;
      3,運行該構造函數;
      4,如果構造函數沒有 return 或者 return 一個返回 this 值是基本類型,則返回
      this;如果 return 一個引用類型,則返回這個引用類型。
  • 此時的this:這時候,this被綁定到了新構造的對象上。

  • 舉例子
    var People = function(name,age){
    this.name = name;
    this.age = age;
    };
    var p1 = new People('harrisking',23);
    p1.name;//harrisking;

  • apply調用模式

  • 定義:apply和call的方法很像,它擁有兩個參數:一個是預設定的this,一個是要傳遞的參數(apply傳遞的是數組)。


分割線


敬愛的方方老師推薦的方法是:
將上述四種調用方式還原為call/apply形式。
則:

  • 方法調用模式:
    obj.foo( ) ==> obj.foo.call('obj');則this就是obj;
  • 函數調用模式:
    a() ==> window.a.call() ==> 因為call未指定this的值,則這里的this代表window;

最后特此感謝方方老師的原文 this的值到底是什么

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,842評論 2 17
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,906評論 0 38
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創建,需要時才創建 最常見的單例模式,...
    Obeing閱讀 2,103評論 1 10
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 三、閉包和高階函數 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍。通過作用域的劃分...
    梁同學de自言自語閱讀 1,494評論 0 6