溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript中的this,bind和that使用實例

發布時間:2020-10-14 12:46:55 來源:腳本之家 閱讀:184 作者:Narcissu5 欄目:web開發

這篇文章主要介紹了Javascript中的this,bind和that使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Javascript中必須通過this來訪問類成員,可是this的特點就是函數綁在哪個對象上,它就指向那個對象。這個可能困擾過很多的程序員,特別是從C#,Java等語言過來的程序員。

function Foo(){
  this.message = 'This is message from Foo';
}

Foo.prototype.printMessage = function(){
  console.log(this.message);
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

輸出為:

This is message from Foo

This is message from Foo2

主要原因就是this改變了,因此Javascript中this的用法,和C++\C#中的大為不同。如果需要傳統方式使用this的函數,可以使用Function.prototype.bind(),指定函數的this值:

function Foo(){
  this.message = 'This is message from Foo';
  
  this.printMessage = (function(){
    console.log(this.message);
  }).bind(this);
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

輸出為:

This is message from Foo

This is message from Foo

另外使用call和apply也可以改變函數調用時的this值。

bind函數的主要問題是IE9以后才開始提供。并且一旦開始習慣了Javascript的this用法,這種bind反而會不習慣。在實踐中,更多用到的還是保存this:

function Foo(){
  var that = this;
  
  this.message = 'This is message from Foo';
  
  this.printMessage = function(){
    console.log(that.message);
  };
}

function Foo2(){
  this.message = 'This is message from Foo2';
}

var foo = new Foo();
foo.printMessage();

var foo2 = new Foo2();
foo2.printMessage = foo.printMessage;
foo2.printMessage();

輸出同上。

注意我們是通過that來訪問的message(除了that,context和self也是常用的名稱)。Javascript一個還算欣慰的地方就是他的閉包上下文始終是在函數定義的地方,因此不管函數被掛上哪個對象上,捕獲到的that始終是這個。當然這個地方不算閉包,有閉無包,但原理是相同的。這也是實踐中用的最多的方法,推薦使用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女