摘要:的作用是,創(chuàng)建一個新函數(shù),稱為綁定函數(shù)。而這句話的效果相當(dāng)于下面的代碼對方法的理解在看別人代碼時,發(fā)現(xiàn)有這么個寫法,這到底是什么意思呢方法可從已有的數(shù)組中返回選定的元素。該方法并不會修改數(shù)組,而是返回一個子數(shù)組。
1.document.querySelectorAll賦給其它變量時, 為什么要.bind(document)?
阮一峰的博客提到$的替代方法:
var $ = document.querySelectorAll.bind(document);
回答(1):我的理解是this的指向問題。querySelectorAll是document下的一個方法,附值給select后,select已經(jīng)是window下的一個屬性,此時,this已經(jīng)不再是document,而window下沒有querySelectorAll方法,所以會報錯;var select = document.querySelectorAll.bind(document),能保證調(diào)用select()時this永遠指向document。
回答(2):這個問題其實和querySelectorAll沒什么關(guān)系。document是類的一個實例,而querySelectorAll是原型鏈上的方法。類比到普通的類和原型方法就很好理解了吧。
通過實例來運行原型鏈上的方法時,解釋器會自動將this指向那個實例,但是直接這樣var select = document.querySelectorAll;,你的變量僅僅是指向了原型鏈上的那個函數(shù),而沒有綁定this指針,所以你才需要在外面手動綁定一下指針。
回答(3):因為document.querySelectorAll是通過document這個對象去調(diào)用querySelectorAll的時候,函數(shù)的環(huán)境變量里this會指向document,假設(shè)querySelectorAll含有this的操作的話,那么this就會指代document。
而當(dāng)你執(zhí)行var select = document.querySelectorAll; 的時候,select所得到的是querySelector這個引用,但是此時如果直接通過select去調(diào)用的話,也就是select("span"); ,由于select(querySelectorAll)直接調(diào)用的話,this會自動指向window,所以就會出錯。
bind的作用是,創(chuàng)建一個新函數(shù),稱為綁定函數(shù)。當(dāng)調(diào)用這個綁定函數(shù)時,綁定函數(shù)會以創(chuàng)建它時傳入 bind()方法的第一個參數(shù)作為 this,傳入 bind() 方法的第二個以及以后的參數(shù)。
而這句話var $ = document.querySelectorAll.bind(document);的效果相當(dāng)于下面的代碼
var $ = function(document) { return function() { return document.querySelectorAll.call(document, arguments); } }2.對Array.prototype.slice.call()方法的理解
在看別人代碼時,發(fā)現(xiàn)有這么個寫法:[].slice.call(arguments, 0),這到底是什么意思呢?
(1)slice() 方法可從已有的數(shù)組中返回選定的元素。
start:必需。規(guī)定從何處開始選取。如果是負數(shù),那么它規(guī)定從數(shù)組尾部開始算起的位置。也就是說,-1 指最后一個元素,-2 指倒數(shù)第二個元素,以此類推。
end:可選。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標(biāo)。如果沒有指定該參數(shù),那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。如果這個參數(shù)是負數(shù),那么它規(guī)定的是從數(shù)組尾部開始算起的元素。
返回一個新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。該方法并不會修改數(shù)組,而是返回一個子數(shù)組。
(2)call()和apply()方法都是在特定的作用域中調(diào)用函數(shù),實際上等于設(shè)置函數(shù)體內(nèi)this對象的值。apply和call方法的第一個參數(shù)都是特定的作用域第二個參數(shù)不同,apply第二個參數(shù)可以是Array的實例,也可以是arguments對象。call方法需要逐個列出需要傳遞的參數(shù)。
(3)arguments對象指數(shù)與數(shù)組類似(它并不是Array的實例),但是可以使用方括號語法訪問每一個元素,使用length來確定傳遞進來多少個參數(shù)。
(4)Array.prototype.slice.call()可以理解為:改變數(shù)組的slice方法的作用域,在特定作用域中去調(diào)用slice方法,call()方法的第二個參數(shù)表示傳遞給slice的參數(shù)即截取數(shù)組的起始位置。
原理:
Array.prototype.slice.call(arguments)能將具有l(wèi)ength屬性的對象(key值為數(shù)字)轉(zhuǎn)成數(shù)組。[]是Array的示例,所以可以直接使用[].slice()方法。
var obj = {0:"hello",1:"world",length:2}; console.log(Array.prototype.slice.call(obj,0));//["hello", "world"]
沒有l(wèi)ength屬性的對象
var obj = {0:"hello",1:"world"};//沒有l(wèi)ength屬性 console.log(Array.prototype.slice.call(obj,0));//[]
可以借用Array.prototype.slice方法的對象要滿足一下兩個條件:
對象本身要可以存取屬性
對象的length屬性可讀寫
3.在 JavaScript 中, true && expression 總是會評估為 expression ,而 false && expression 總是執(zhí)行為 false 。console.log(true && "expression") console.log(false && "expression") 輸出: expression false
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95464.html
摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...
摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進而查漏補缺,比通過面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個和個經(jīng)典面試題前端開發(fā)面試題如何面試前端工程師很重要個變態(tài)題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進而查漏補缺,比通過面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進而查漏補缺,比通過面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個和個經(jīng)典面試題前端開發(fā)面試題如何面試前端工程師很重要個變態(tài)題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進而查漏補缺,比通過面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:面試的心得體會簡歷制作我做了兩份簡歷,用兩個手機賬號,兩個簡歷名字,分別在各個招聘網(wǎng)站投了雙份簡歷,一個是數(shù)據(jù)分析的簡歷一個是全棧開發(fā)的簡歷,我真正接觸快年,不管是學(xué)習(xí)還是工作學(xué)到的東西,這兩年大概掌握了前端爬蟲數(shù)據(jù)分析機器學(xué)習(xí)技術(shù), showImg(https://upload-images.jianshu.io/upload_images/13090773-b96aac7e974c...
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí)前端方向,自學(xué),技術(shù)棧時間背景大概是在月日準(zhǔn)備好簡歷開始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習(xí)崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習(xí) 前端方向,自學(xué),vue技術(shù)棧 時間背景 大概是在11月9日準(zhǔn)備...
閱讀 2043·2021-11-11 16:54
閱讀 2121·2019-08-30 15:55
閱讀 3621·2019-08-30 15:54
閱讀 398·2019-08-30 15:44
閱讀 2239·2019-08-30 10:58
閱讀 431·2019-08-26 10:30
閱讀 3055·2019-08-23 14:46
閱讀 3204·2019-08-23 13:46