摘要:三解決方法使用匿名函數(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
摘要:的三個步驟舉個例子正常創(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...
摘要:簡單學(xué)習(xí)前言是一套流的處理機制。可以說是真正的管理者,其他的,如是命令,是執(zhí)行命令的士兵。打印初始狀態(tài)每次更新時,打印日志注意返回一個函數(shù)用來注銷監(jiān)聽器發(fā)起一系列停止監(jiān)聽更新簡單學(xué)習(xí)二 Redux簡單學(xué)習(xí) - [ store, action, reducer ] 前言 redux是一套state流的處理機制。 主要有三要素: store 【長官】 管理狀態(tài),...
摘要:簡單學(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...
摘要:感覺不能這樣下去就學(xué)寫一下單元測試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。具體執(zhí)行的測試用例實現(xiàn)代碼。測試工具斷言庫測試驅(qū)動開發(fā)及測試框架入門學(xué)習(xí) 最近博主工作是和另一枚后端合作,但是經(jīng)常發(fā)現(xiàn)他寫的接口出錯,苦逼連連。感覺不能這樣下去就學(xué)寫一下單元測試,等他更新代碼我都跑一遍確認(rèn)一下,這樣工作安心多了。 經(jīng)過博主一番查找,貌似被推薦比較多的有mocha和chai,下面記錄簡...
閱讀 1986·2021-09-30 09:46
閱讀 1397·2019-08-30 15:43
閱讀 1150·2019-08-29 13:28
閱讀 1950·2019-08-29 11:24
閱讀 1728·2019-08-26 13:22
閱讀 4022·2019-08-26 12:01
閱讀 1848·2019-08-26 11:33
閱讀 3270·2019-08-23 15:34