亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么時候使用 call 或者在 Javscript 中使用 call 有什么好處?

什么時候使用 call 或者在 Javscript 中使用 call 有什么好處?

手掌心 2022-12-09 13:44:32
我正在瀏覽 Ramda.JS 的源代碼,它是一個面向 Javascript 開發人員的功能庫。這幾行代碼讓我有點困惑。var sort = _curry2(function sort(comparator, list) {  return Array.prototype.slice.call(list, 0).sort(comparator);});我的問題是Array.prototype.slice.call(list, 0)應該與 完全相同list.slice(0),但第二種方式要短得多為什么用.call這里,為什么不用第二種方式呢?在這里使用 call 有什么好處嗎?
查看完整描述

3 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

值得注意的是,當不是數組/字符串并且沒有方法時,使用Array.prototype.slice.call(arr, 0)overarr.slice()不會拋出錯誤。arrarrslice

也許他們想要一個更健壯的實現,因此使用第一種方法。


查看完整回答
反對 回復 2022-12-09
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

從簽名我可以說 list.slice()[0] 與 Array.prototype.slice.call(list, 0) 完全不同,在前面的語句中你首先調用 list.slice 并訪問它的第 0 個索引元素,在后面您正在調用 Array.slice 的語句將上下文作為列表的值傳遞,將 0 作為參數傳遞給切片函數。



查看完整回答
反對 回復 2022-12-09
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

在我看來,Array.prototype.slice.call支持 Array-Like Objects,比如 NodeList 集合。


const divs = document.querySelectorAll('div')

divs.slice(0)

//Uncaught TypeError: divs.slice is not a function

Array.prototype.slice.call(divs, 0)

//(222) [div.ng-toast.ng-toast--right.ng-toast--bottom.ng-toast--animate-fade, ……


查看完整回答
反對 回復 2022-12-09
  • 3 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號