Array.prototype.slice.call(arguments)

Array.prototype.slice.call(arguments)能將具有length屬性的對象轉成數組,除了IE下的節點集合(因為ie下的dom對象是以com對象的形式實現的,js對象與com對象不能進行轉換)
如:
1 var a={length:2,0:'first',1:'second'};
2 Array.prototype.slice.call(a);//  ["first", "second"]
3  
4 var a={length:2};
5 Array.prototype.slice.call(a);//  [undefined, undefined]

首先,slice有兩個用法,一個是String.slice,一個是Array.slice,第一個返回的是字符串,第二個返回的是數組,這里我們看第2個。

Array.prototype.slice.call(arguments)能夠將arguments轉成數組,那么就是arguments.toArray().slice();到這里,是不是就可以說Array.prototype.slice.call(arguments)的過程就是先將傳入進來的第一個參數轉為數組,再調用slice?
?
再看call的用法,如下例子
復制代碼
1 var a = function(){
2      console.log(this);    // 'littledu'
3      console.log(typeof this);      //  Object
4      console.log(this instanceof String);    // true
5 }
6 a.call('littledu');
復制代碼
可以看出,call了后,就把當前函數推入所傳參數的作用域中去了,不知道這樣說對不對,但反正this就指向了所傳進去的對象就肯定的了。
到這里,基本就差不多了,我們可以大膽猜一下slice的內部實現,如下
復制代碼
1 Array.prototype.slice = function(start,end){
2      var result = new Array();
3      start = start || 0;
4      end = end || this.length; //this指向調用的對象,當用了call后,能夠改變this的指向,也就是指向傳進來的對象,這是關鍵
5      for(var i = start; i < end; i++){
6           result.push(this[i]);
7      }
8      return result;
9 }
復制代碼

大概就是這樣吧,理解就行,不深究。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

動態內存分配導致內存泄漏之處

摘要&#xff1a;舉了幾個動態內存分配過程中&#xff0c;發生內存泄漏的例子 1. 分配了內存&#xff0c;卻沒有及時刪除,導致泄漏 1: void doSomething() 2: { 3: int *pnValue new int; 4: } 2. 為指針變量分配了一個內存&#xff0c;然后又讓指針變量指向其他的值,導致…

nodejs常用模塊-url

URL nodejs中針對url的常用方法。 node下打印url&#xff0c;結果&#xff1a; 引入url模塊 var url require(url) 1、parse方法 將url解析成對象&#xff0c;parse方法原型&#xff1a; url.parse(urlStr[, parseQueryString][, slashesDenoteHost]) 可傳遞三個參數…

常用的javascript設計模式

請堅持 什么是設計模式 百度百科&#xff1a; 設計模式&#xff08;Design pattern&#xff09;是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。 使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問&#xff0c;設計模式…

express項目創建

1、安裝項目生成器 cnpm i express-generator -g express4.0以后&#xff0c;express與express-generator包分離&#xff0c;全局使用express命令生成項目骨架時應該安裝express-generator包。 2、生成項目骨架 express server 默認使用的是jade模板&#xff0c;使用ejs模…

設置Jexus開機啟動

把jexus做成系統服務&#xff0c;就像windows服務一樣&#xff0c;可以設置開機啟動就可以了。 第一、進入目錄 /lib/systemd/system/ 第二、新建文件 vi jexus.service 文件內容 [Unit] Descriptionjexus Afternetwork.target[Service] Typeforking ExecStart/usr/jexus/jw…

iOS警告-This block declaration is not a prototype

關于警告 我們定義一個不帶參數的block,通常是如下的方式 1typedefvoid (^UpdateSwichBtnBlock)();在xcode9中會提示一個警告 12This block declaration is not a prototypeInsert ‘void解決方式可以是如下的幾種 1typedefvoid (^UpdateSwichBtnBlock)(void);但是這樣,很多第三…

mac環境mongodb安裝與配置

一、安裝 MAC環境安裝mongodb有兩種方式&#xff0c;一種方式是通過下載安裝包&#xff0c;另一種方式是通過homebrew。 1、安裝包方式 從mongodb官網可以下載MAC安裝包&#xff1a;https://www.mongodb.com/download-center#community 或者使用curl下載 # 進入 /usr/loca…

用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型...

以下為借鑒 var stack1 [], stack2[]; function push(node){stack1.push(node);}function pop(){if(stack2.length){return stack2.pop();}else{if(stack1.length){var len stack1.length;for(var i0;i<len;i){stack2.push(stack1.pop());}return stack2.pop()}else{retur…

使用CocoaPods導入百度地圖SDK所遇到的坑

執行pod install遇到的問題:解決方安:百度了下,發現pod install命令被墻了,換成pod install --verbose --no-repo-update

NSTimer不準確與GCDTimer詳解

NSTimer不準&#xff0c;scheduleTimer放在runloop里面&#xff0c;受runloop模式影響會不準// [NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> r…

flex的12個屬性

容器&#xff08;父元素&#xff09;的屬性&#xff1a; flex-direction屬性決定主軸的方向 flex-wrap 屬性決定項目在一行排不下的情況下是否換行 flex-flow flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式&#xff0c;默認值為row nowrap。 jstify-content …

vue圖片懶加載插件vue-lazyload

插件地址&#xff1a;https://github.com/hilongjw/vue-lazyload demo&#xff1a;http://hilongjw.github.io/vue-lazyload/ 1、安裝 cnpm i vue-lazyload -S 2、使用 main.js import VueLazyLoad from vue-lazyloadVue.use(VueLazyLoad, {error:/static/error.png,loadin…

IT需求過程管理

IT部門就是為其他業務、內勤部門提供信息化手段的&#xff0c;所以在實施信息化系統的時候首先要做的就是需求調研&#xff0c;但是針對于絕大多數業務部門的人員而言&#xff0c;信息系統是很不熟悉的&#xff0c;我們會經常聽到這樣的回復“這個應該很快就可以實現吧”、“當…

maskView與CAGradientLayer詳解

#maskView基本原理 - png圖片透明像素的原理 - maskView可類比于多張png圖片的疊加遮罩&#xff0c;原理類似 - maskView是iOS8以上才有的&#xff0c;如果要考慮兼容低版本&#xff0c;用maskLayer替代 //使用maskView的情況 property (nonatomic, strong)UIImageView *addIma…

nodejs的啟動方式

1、原始node命令 直接命令行中使用node命令 node xxx.js 或者安裝nodemon&#xff0c;使用nodemon啟動方便在開發階段熱部署代碼改動 npm i nodemon -G nodemon xxx.js 2、webstorm方式 webstorm中&#xff0c;需要執行的文件的上&#xff0c;右鍵->run&#xff0c;右…

win7rc 序列號- 10/21之前

安裝介紹&#xff1a;http://www.microsoft.com/china/windows/windows-7/download.aspx 注冊獲得序列號&#xff1a;http://technet.microsoft.com/zh-cn/evalcenter/dd353205.aspx?ITPIDmscomsc在 2009 年 10 月 21 日之前&#xff0c;您仍可以通過注冊來獲取產品密鑰或查找…

maskView與CAGradientLayer那回事兒

maskView基本原理 png圖片透明像素的原理maskView可類比于多張png圖片的疊加遮罩&#xff0c;原理類似maskView是iOS8以上才有的&#xff0c;如果要考慮兼容低版本&#xff0c;用maskLayer替代 //使用maskView的情況 property (nonatomic, strong)UIImageView *addImageView;…

mongoose操作mongodb

http://mongoosejs.com/docs/api.html#index-js mongoose是nodejs環境下操作mongodb的模塊封裝&#xff0c;使用mongoose之后&#xff0c;實際上只需要在mongodb中創建好數據庫與用戶&#xff0c;集合的定義、創建、操作等直接使用mongoose即可。 一、連接二、重要概念三、基本…

虛擬機上使用ghost xp

虛擬機ghost 1 先用啟動項里的pq對虛擬機的硬盤格式化&#xff0c;然后最重要的一點就是 --右擊--進階-設定為作用然后執行2 重啟一鍵安裝到C盤就行了轉載于:https://www.cnblogs.com/master-zhu/archive/2009/09/15/1567081.html

iOS11新增版本判斷API

iOS11新增版本判斷API iOS11版本現在有了簡單的API&#xff0c;OC也開始支持swfit的available語法&#xff0c;不用再手寫iOS版本判斷了。 if (available(iOS 11.0, *)) {// 版本適配 } // 或者 #ifdef __IPHONE_11_0 #endif 目前沒發現有iPhoneX的機型判斷API&#xff0…