成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Slice無(wú)參調(diào)用可以將類數(shù)組對(duì)象(含有l(wèi)ength屬性)轉(zhuǎn)化成數(shù)組

MudOnTire / 1374人閱讀

摘要:首先,有兩個(gè)用法,一個(gè)是一個(gè)是,第一個(gè)返回的是字符串,第二個(gè)返回的是數(shù)組,這里我們看第個(gè)。最后,附個(gè)轉(zhuǎn)成數(shù)組的通用函數(shù)據(jù)說(shuō)這樣比快

Array.prototype.slice.call(arguments)

根據(jù)call的使用方法,我們可以猜測(cè)以下可能相等:

[].slice.call(arguments)  => arguments.slice()

我?guī)е孟裆倭艘粋€(gè)必需參數(shù)的疑問(wèn)去查資料后得知:
Array.prototype.slice.call(arguments)能將具有length屬性的對(duì)象轉(zhuǎn)成數(shù)組,除了IE下的節(jié)點(diǎn)集合(因?yàn)閕e下的dom對(duì)象是以com對(duì)象的形式實(shí)現(xiàn)的,js對(duì)象與com對(duì)象不能進(jìn)行轉(zhuǎn)換)
如:

 var a={length:2,0:"first",1:"second"};
 Array.prototype.slice.call(a);//  ["first", "second"]
  
 var a={length:2};
 Array.prototype.slice.call(a);//  [undefined, undefined]

可能剛開始學(xué)習(xí)js的童鞋并不是很能理解這句為什么能實(shí)現(xiàn)這樣的功能。比如我就是一個(gè),所以,來(lái)探究一下。

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

Array.prototype.slice.call(arguments)能夠?qū)?b>arguments轉(zhuǎn)成數(shù)組,那么就是arguments.toArray().slice();到這里,是不是就可以說(shuō)Array.prototype.slice.call(arguments)的過(guò)程就是先將傳入進(jìn)來(lái)的第一個(gè)參數(shù)轉(zhuǎn)為數(shù)組,再調(diào)用slice?

再看call的用法,如下例子

var a = function(){
     console.log(this);    // "littledu"
     console.log(typeof this);      //  Object
     console.log(this instanceof String);    // true
}
a.call("littledu");

可以看出,call了后,就把當(dāng)前函數(shù)推入所傳參數(shù)的作用域中去了,不知道這樣說(shuō)對(duì)不對(duì),但反正this就指向了所傳進(jìn)去的對(duì)象就肯定的了。
到這里,基本就差不多了,我們可以大膽猜一下slice的內(nèi)部實(shí)現(xiàn),如下

1 Array.prototype.slice = function(start,end){
2      var result = new Array();
3      start = start || 0;
4      end = end || this.length; //this指向調(diào)用的對(duì)象,當(dāng)用了call后,能夠改變this的指向,也就是指向傳進(jìn)來(lái)的對(duì)象,這是關(guān)鍵
5      for(var i = start; i < end; i++){
6           result.push(this[i]);
7      }
8      return result;
9 }

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

最后,附個(gè)轉(zhuǎn)成數(shù)組的通用函數(shù)

var toArray = function(s){
 2     try{
 3         return Array.prototype.slice.call(s);
 4     } catch(e){
 5             var arr = [];
 6             for(var i = 0,len = s.length; i < len; i++){
 7                 //arr.push(s[i]);
                   arr[i] = s[i];  //據(jù)說(shuō)這樣比push快
 8             }
 9              return arr;
10     }
11 }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95959.html

相關(guān)文章

  • 詳解call bind apply - 區(qū)別/使用場(chǎng)景/es6實(shí)現(xiàn)/es3實(shí)現(xiàn)

    摘要:的區(qū)別接收數(shù)組一連串參數(shù)返回一個(gè)函數(shù)的使用場(chǎng)景將類數(shù)組含有屬性的對(duì)象轉(zhuǎn)化為數(shù)組類數(shù)組例如通過(guò)獲取的元素含有屬性的對(duì)象具有屬性,并且可以通過(guò)下標(biāo)來(lái)訪問(wèn)其中的元素,但是沒(méi)有中的等方法。 call,apply,bind的區(qū)別 apply接收數(shù)組 func.apply(obj, [arus]) call一連串參數(shù) func.call(obj, param1, param2....) bind...

    Alex 評(píng)論0 收藏0
  • 把玩 JavaScript 中的 bind

    摘要:此模式調(diào)用函數(shù)的時(shí)候,被綁定到全局對(duì)象。構(gòu)造器調(diào)用模式如果在一個(gè)函數(shù)前面帶上來(lái)調(diào)用,那么背地里將會(huì)創(chuàng)建一個(gè)連接到該函數(shù)的成員的新對(duì)象,同時(shí)會(huì)被綁定到新對(duì)象上。 前言 今天閑著無(wú)聊隨便逛了逛MDN,忽而看到一個(gè)方法Function.prototype.bind(),突然發(fā)現(xiàn)除了使用這個(gè)方法之外都沒(méi)有仔細(xì)琢磨過(guò)這個(gè)方法。于是乎,找到了kill time的事情-寫博客。 基礎(chǔ)知識(shí)簡(jiǎn)介 ...

    shenhualong 評(píng)論0 收藏0
  • 理解javascript類數(shù)組

    摘要:也就是說(shuō),為一些常規(guī)對(duì)象增加一些屬性可以使其變成類數(shù)組對(duì)象。實(shí)際上,類數(shù)組的定義只有一條,具有屬性。在中,所有的數(shù)組方法都是通用的。 什么是類數(shù)組 javascript中一些看起來(lái)像卻不是數(shù)組的對(duì)象,叫做類數(shù)組。也就是說(shuō),為一些常規(guī)對(duì)象增加一些屬性可以使其變成類數(shù)組對(duì)象。 類數(shù)組的特征: 有索引(數(shù)字)屬性和length屬性的對(duì)象 不具有數(shù)組的方法。間接調(diào)用數(shù)組的一些方法,比如pus...

    yzzz 評(píng)論0 收藏0
  • JavaScript數(shù)組方法總結(jié)

    摘要:如重排序方法它的原理是先調(diào)用數(shù)組的方法,之后再進(jìn)行字符串的比較。長(zhǎng)度為的數(shù)組。返回的是被刪除的項(xiàng),如果沒(méi)刪除則返回空數(shù)組,而且之前的數(shù)組也被改變位置方法可以檢測(cè)變量,它的兩個(gè)參數(shù)是第一個(gè)是要查找的值或變量,第二個(gè)是從哪開始找。 length屬性方法 數(shù)組的length屬性不單單是只讀的,還可以寫入var color = [‘red’,’blue’,’black’];Color.leng...

    Forest10 評(píng)論0 收藏0
  • js基礎(chǔ)篇

    摘要:安全防范機(jī)制未聲明變量聲明未初始化變量使用來(lái)做安全防范機(jī)制可以預(yù)防報(bào)錯(cuò)數(shù)組數(shù)組可以容納任何類型的值。因此與進(jìn)行操作即可截取中的位數(shù)位。 安全防范機(jī)制 未聲明變量undeclared、聲明未初始化變量undefined var a b typeof a //undefined typeof b //undefined 使用typeof來(lái)做安全防范機(jī)制可以預(yù)防報(bào)錯(cuò) if(typeof...

    solocoder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<