摘要:三解決方法使用匿名函數(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
摘要:的三個(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...
摘要:簡(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),...
摘要:簡(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...
摘要:感覺(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)...
閱讀 1959·2021-09-30 09:46
閱讀 1370·2019-08-30 15:43
閱讀 1129·2019-08-29 13:28
閱讀 1929·2019-08-29 11:24
閱讀 1687·2019-08-26 13:22
閱讀 3929·2019-08-26 12:01
閱讀 1823·2019-08-26 11:33
閱讀 3246·2019-08-23 15:34