国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

js手札--bind

RancherLabs / 3592人閱讀

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

bind {
解決問(wèn)題:callback() { this ? //誰(shuí)在用 }
}

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

function foo(cb) {
  cb();
}

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

來(lái)看個(gè)具體的問(wèn)題(后面就舉了個(gè)例子,沒(méi)興趣的可以到此為止了。篇幅比較短,見(jiàn)諒) =>

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

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

// error 不認(rèn)識(shí)arr
// 因?yàn)樽饔糜騿?wèn)題。現(xiàn)在調(diào)用pushArray的對(duì)象是window,而window是沒(méi)有arr的
["x","y",1,2].forEach(lost.pushArray);

二、證明問(wèn)題

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

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

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

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

// 在核心代碼前,加一層殼(匿名函數(shù)),讓window使用這個(gè)匿名函數(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é)合第一種解決方法,大膽的猜測(cè),bind的偽實(shí)現(xiàn)可以是,相當(dāng)于返回一個(gè)匿名函數(shù)。

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79455.html

相關(guān)文章

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

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

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

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

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

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

    Anleb 評(píng)論0 收藏0
  • 前端臨床手札——單元測(cè)試

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

    kid143 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

RancherLabs

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<