最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Function中的bind()示例詳解

 更新時間:2016年12月02日 09:23:59   投稿:daisy  
其實所謂bind顧名思義就是綁定。bind()方法會創(chuàng)建一個新函數(shù),當(dāng)這個新函數(shù)被調(diào)用時,它的this值是傳遞給bind()的第一個參數(shù),它的參數(shù)是bind()的其他參數(shù)和其原本的參數(shù)。這么說可能很多人都糊涂了,下面通過這篇文章的示例來給大家詳細(xì)的介紹下吧。

前言

bind()接受無數(shù)個參數(shù),第一個參數(shù)是它生成的新函數(shù)的this指向,比如我傳個window,不管它在何處調(diào)用,這個新函數(shù)中的this就指向window,這個新函數(shù)的參數(shù)就是bind()的第二個、第三個、第四個....第n個參數(shù)加上它原本的參數(shù)。(行吧,我自己都蒙圈了)

示例介紹

我們還是看看栗子比較好理解,舉個bind()最基本的使用方法:

this.x = 9; 
var module = {
 x: 81,
 getX: function() { return this.x; }
};

module.getX(); // 返回 81

var retrieveX = module.getX;
retrieveX(); // 返回 9, 在這種情況下,"this"指向全局作用域

// 創(chuàng)建一個新函數(shù),將"this"綁定到module對象
// 新手可能會被全局的x變量和module里的屬性x所迷惑
var boundGetX = retrieveX.bind(module);
boundGetX(); // 返回 81

這里很明顯,我們在window對象下調(diào)用retrieveX,得到的結(jié)果肯定是window下的x,我們把module對象綁定到retrieveXthis上,問題就解決了,不管它在何處調(diào)用,this都是指向module對象。

還有bind()的其他參數(shù),相信第一次接觸bind()的朋友看到上面的定義都會蒙圈。

還是舉個栗子:

function list() {
 return Array.prototype.slice.call(arguments);
}

var list1 = list(1, 2, 3); // [1, 2, 3]

// 創(chuàng)建一個擁有預(yù)設(shè)初始參數(shù)的函數(shù)
var leadingThirtysevenList = list.bind(undefined,[69,37],{a:2});

var list2 = leadingThirtysevenList(); // [[69,37],{a:2}]
var list3 = leadingThirtysevenList(1, 2, 3); // [[69,37],{a:2}, 1, 2, 3]

list函數(shù)很簡單,把傳入的每個參數(shù)插入到一個數(shù)組里,我們用bind()list函數(shù)設(shè)置初始值,因為不用改變listthis的指向,所以直接傳undefined,從第二個參數(shù)開始,就是要傳入list函數(shù)的值,list2list3的返回值很好的說明了一切。

我自己一般使用的bind()的場景是配合setTimeout函數(shù),因為在執(zhí)行setTimeout時,this會默認(rèn)指向window對象,在使用bind()之前,我是這么做的:

 function Coder(name) {
  var that = this;
  that.name = name;
  that.getName = function() {
   console.log(that.name)
  };
  that.delayGetName = function() {
   setTimeout(that.getName,1000)
  };
 }
 var me = new Coder('Jins')
 me.delayGetName()//延遲一秒輸出Jins

在函數(shù)內(nèi)頂層定義一個that緩存this的指針,這樣不論怎么調(diào)用,that都是指向 Coder的實例,但是多定義一個變量總是讓人不太舒服。

使用bind()就簡單多了:

 function Coder(name) {
  this.name = name;
  this.getName = function() {
   console.log(this.name)
  };
  this.delayGetName = function() {
   setTimeout(this.getName.bind(this),1000)
  };
 }
 var me = new Coder('Jins')
 me.delayGetName()//延遲一秒輸出Jins

這樣就OK了,直接把setTimeoutthis綁定到外層的this,這肯定是我們想要的!

最后附上參考地址:

Function.prototype.bind()

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 微信小程序事件 bindtap bindinput代碼實例

    微信小程序事件 bindtap bindinput代碼實例

    這篇文章主要介紹了微信小程序事件 bindtap bindinput代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • JS從一組數(shù)據(jù)中找到指定的單條數(shù)據(jù)的方法

    JS從一組數(shù)據(jù)中找到指定的單條數(shù)據(jù)的方法

    這篇文章給大家介紹基于js如何從一組數(shù)據(jù)中找到指定的單條數(shù)據(jù),非常實用,實現(xiàn)方案也很簡單,需要的朋友可以參考下
    2016-06-06
  • 淺談Javascript線程及定時機制

    淺談Javascript線程及定時機制

    這篇文章主要介紹了淺談Javascript線程及定時機制的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • Bootstrap中CSS的使用方法

    Bootstrap中CSS的使用方法

    這篇文章主要為大家詳細(xì)介紹了Bootstrap中CSS的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 微信內(nèi)置瀏覽器圖片查看器的代碼實例

    微信內(nèi)置瀏覽器圖片查看器的代碼實例

    這篇文章主要介紹了微信內(nèi)置瀏覽器圖片查看器的代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 詳解Next.js頁面渲染的優(yōu)化方案

    詳解Next.js頁面渲染的優(yōu)化方案

    這篇文章主要介紹了詳解Next.js頁面渲染的優(yōu)化方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 7個令人驚訝的JavaScript特性詳解

    7個令人驚訝的JavaScript特性詳解

    在學(xué)習(xí)ES6的過程中我碰到了幾個特性,它們讓我驚訝,其中大部分是關(guān)于 ES6 的特性但也有一部分是 ES3 特性,這些特性我以前從未用過,而現(xiàn)在我將開始使用它們,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • JavaScript如何檢測并處理頁面卡頓

    JavaScript如何檢測并處理頁面卡頓

    頁面卡頓通常指的是網(wǎng)頁的響應(yīng)速度慢,用戶的操作不能及時得到反饋,本文將為大家介紹如何使用JavaScript實現(xiàn)檢測與處理頁面卡頓,需要的可以了解下
    2025-03-03
  • 前端排查內(nèi)存泄漏的方法及實戰(zhàn)案例

    前端排查內(nèi)存泄漏的方法及實戰(zhàn)案例

    內(nèi)存泄漏是指在程序運行時,分配的內(nèi)存沒有被正確釋放,導(dǎo)致內(nèi)存空間的浪費,最終可能會導(dǎo)致程序崩潰或運行緩慢,這篇文章主要介紹了前端排查內(nèi)存泄漏的相關(guān)資料,需要的朋友可以參考下
    2025-03-03
  • JavaScript fetch接口案例解析

    JavaScript fetch接口案例解析

    本文通過案例給大家介紹了JavaScript fetch接口,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08

最新評論

抚宁县| 娱乐| 大丰市| 本溪市| 城市| 蒙阴县| 海南省| 昂仁县| 仙桃市| 伊吾县| 沙田区| 株洲市| 沭阳县| 长乐市| 当雄县| 都安| 全南县| 田阳县| 普兰县| 喀喇| 朔州市| 特克斯县| 大渡口区| 西乡县| 金溪县| 清苑县| 绿春县| 道孚县| 津市市| 金坛市| 怀远县| 新蔡县| 漠河县| 剑川县| 岱山县| 六枝特区| 陆川县| 安徽省| 鹰潭市| 泽州县| 三穗县|