久久96国产精品久久久-久久发布国产伦子伦精品-久久精品国产精品青草-久久天天躁夜夜躁狠狠85麻豆

技術員聯盟提供win764位系統下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

JavaScript中this的用法及this在不同應用場景的作用詳解

來源:技術員聯盟┆發布時間:2017-11-10 06:50┆點擊:

  由于其運行期綁定的特性,JavaScript 中的 this 含義要豐富得多,它可以是全局對象、當前對象或者任意對象,這完全取決于函數的調用方式。

  JavaScript 中函數的調用有以下幾種方式:作為函數調用,作為對象方法調用,作為構造函數調用,和使用 apply 或 call 調用。下面我們將按照調用方式的不同,分別討論 this 的含義。

  情況一:純粹的函數調用

  這是函數的最通常用法,屬于全局性調用,因此this就代表全局對象Global。

  1、函數也可以直接被調用,此時 this 綁定到全局對象。

  function makeNoSense(x) {

  this.x = x;

  }

  makeNoSense(5);

  console.log(x);// x 已經成為一個值為 5 的全局變量

  function test(){

  this.x = 1;

  alert(this.x);

  }

  test(); // 1

  情況二:作為對象方法的調用

  函數還可以作為某個對象的方法調用,這時this指代對象內部屬性被調用。

  var myObject = {

  value :0,

  increment:function (inc){

  this.value += typeof inc ==='number' ? inc:1;

  }

  };

  myObject.increment();

  console.log(myObject.value); //1

  myObject.increment(2);

  console.log(myObject.value); //3

  情況三 :作為構造函數調用

  javaScript 支持面向對象式編程,與主流的面向對象式編程語言不同,JavaScript 并沒有類(class)的概念,而是使用基于原型(prototype)的繼承方式。

  相應的,JavaScript 中的構造函數也很特殊,如果不使用 new 調用,則和普通函數一樣。作為又一項約定俗成的準則,構造函數以大寫字母開頭,提醒調用者使用正確的方式調用。如果調用正確,this 綁定到新創建的對象上。

  所謂構造函數,就是通過這個函數生成一個新對象(object)。這時,this就指這個新對象。

  function Point(x, y){

  this.x = x;

  this.y = y;

  }

  var p1 = new Point(3,2);

  console.log(p1.x+","+p1.y);//3,2

  為了表明這時this不是全局對象,我對代碼做一些改變:

  var x = 4;

  function Point(x, y){

  this.x = x;

  this.y = y;

  }

  var p1 = new Point(3,2);

  console.log(p1.x+","+p1.y);//3,2

  情況四: apply或call調用

  讓我們再一次重申,在 JavaScript 中函數也是對象,對象則有方法,apply 和 call 就是函數對象的方法。這兩個方法異常強大,他們允許切換函數執行的上下文環境(context),即 this 綁定的對象。很多 JavaScript 中的技巧以及類庫都用到了該方法。讓我們看一個具體的例子:

  function Point(x, y){

  this.x = x;

  this.y = y;

  this.moveTo = function(x, y){

  this.x = x;

  this.y = y;

  console.log(this.x+","+this.y);

  }

  }

  var p1 = new Point(0, 0);

  var p2 = {x: 0, y: 0};

  p1.moveTo(1, 1); //1,1

  p1.moveTo.apply(p2, [10, 10]);//10,10

  在上面的例子中,我們使用構造函數生成了一個對象 p1,該對象同時具有 moveTo 方法;使用對象字面量創建了另一個對象 p2,我們看到使用 apply 可以將 p1 的方法應用到 p2 上,這時候 this 也被綁定到對象 p2 上。另一個方法 call 也具備同樣功能,不同的是最后的參數不是作為一個數組統一傳入,而是分開傳入的。本文通過對JavaScript中經常容易混淆的this在四中應用場景中的使用方法進行了講解,希望對您有所幫助,喜歡的話,請推薦一下哦。