成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js手札--bind

RancherLabs / 3615人閱讀

摘要:三解決方法使用匿名函數(shù)其實看看上面的丟失原因之后,就知道了其實的使用權(quán)被對象奪去了,而我們需要讓奪回的使用權(quán)。結(jié)合第一種解決方法,大膽的猜測,的偽實現(xiàn)可以是,相當(dāng)于返回一個匿名函數(shù)。

bind {
解決問題:callback() { this ? //誰在用 }
}

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

function foo(cb) {
  cb();
}

foo(callback);  // 輸出的this是誰的呢?  =>  全局window的
foo(callback.bind(callback));  // 輸出的this是誰的呢?  =>  callback的
foo(callback.bind(foo));  // 輸出的this是誰的呢?  =>  foo的

來看個具體的問題(后面就舉了個例子,沒興趣的可以到此為止了。篇幅比較短,見諒) =>

一、問題再現(xiàn)
// 把["x","y",1,2]拷貝到lost.arr中

var lost = {
    arr : [],
    pushArray: function(s) {
        this.arr.push(s);
    }
};

// error 不認(rèn)識arr
// 因為作用域問題。現(xiàn)在調(diào)用pushArray的對象是window,而window是沒有arr的
["x","y",1,2].forEach(lost.pushArray);

二、證明問題

那么怎么就能證明是window對象調(diào)用了lost.pushArray呢。

window.arr = [];
["x","y",1,2].forEach(lost.pushArray);
console.log(window.arr);

三、解決方法 I.使用匿名函數(shù)

其實看看上面的丟失原因之后,就知道了其實pushArray的使用權(quán)被window對象奪去了,而我們需要讓lost奪回pushArray的使用權(quán)。

// 在核心代碼前,加一層殼(匿名函數(shù)),讓window使用這個匿名函數(shù),就解決了
["x","y",1,2].forEach(function(s) { // 匿名函數(shù)
    // 核心代碼
    lost.pushArray(s);
});
II.使用bind

使用bind就比較優(yōu)雅了。

["x","y",1,2].forEach(lost.pushArray.bind(lost));

結(jié)合第一種解決方法,大膽的猜測,bind的偽實現(xiàn)可以是,相當(dāng)于返回一個匿名函數(shù)。

function bind(me) {
   var fn = this;
   return function() {
       fn.apply(me, arguments);
   }
}

驗證一下,哈哈,結(jié)果和bind一樣喲。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79455.html

相關(guān)文章

  • js手札--js中new到底做了些啥

    摘要:的三個步驟舉個例子正常創(chuàng)建一個對象以上其實等價于個步驟個步驟注兩步,其實就是創(chuàng)建一個空對象拷貝構(gòu)造函數(shù)的給實例對象的初始化對象把當(dāng)做中的,做初始化的操作例如通過其實就相當(dāng)于 new的三個步驟 舉個例子: # 正常創(chuàng)建一個對象 function Super() {}; var s = new Super(); 以上其實等價于3個步驟 # 3個步驟 var s = {}; s.__prot...

    3fuyu 評論0 收藏0
  • js手札--redux簡單學(xué)習(xí)[ store, action, reducer ]

    摘要:簡單學(xué)習(xí)前言是一套流的處理機制。可以說是真正的管理者,其他的,如是命令,是執(zhí)行命令的士兵。打印初始狀態(tài)每次更新時,打印日志注意返回一個函數(shù)用來注銷監(jiān)聽器發(fā)起一系列停止監(jiān)聽更新簡單學(xué)習(xí)二 Redux簡單學(xué)習(xí) - [ store, action, reducer ] 前言 redux是一套state流的處理機制。 主要有三要素: store 【長官】 管理狀態(tài),...

    wyk1184 評論0 收藏0
  • js手札--redux簡單學(xué)習(xí)(二)

    摘要:簡單學(xué)習(xí)二簡單學(xué)習(xí),合并多個如有下面兩個,,換成,則為則調(diào)用時可以寫成這樣 redux簡單學(xué)習(xí)(二) redux簡單學(xué)習(xí)[ store, action, reducer ] 1. combineReducers combineReducers,合并多個reducer 如有下面兩個reducer,todoApp,textApp // reducers/todoApp.js export...

    Anleb 評論0 收藏0
  • 前端臨床手札——單元測試

    摘要:感覺不能這樣下去就學(xué)寫一下單元測試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。具體執(zhí)行的測試用例實現(xiàn)代碼。測試工具斷言庫測試驅(qū)動開發(fā)及測試框架入門學(xué)習(xí) 最近博主工作是和另一枚后端合作,但是經(jīng)常發(fā)現(xiàn)他寫的接口出錯,苦逼連連。感覺不能這樣下去就學(xué)寫一下單元測試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。 經(jīng)過博主一番查找,貌似被推薦比較多的有mocha和chai,下面記錄簡...

    kid143 評論0 收藏0

發(fā)表評論

0條評論

RancherLabs

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<