摘要:看源碼看到的,學(xué)習(xí)一下該語句涉及兩個(gè)知識點(diǎn)。是一個(gè)關(guān)鍵字,代表當(dāng)前參數(shù)知識點(diǎn)的用法知識點(diǎn)的用法。返回一個(gè)子片段,對原先的沒有影響還可以用負(fù)數(shù)當(dāng)參數(shù)。如果這個(gè)參數(shù)沒有被設(shè)置,則返回從開始到最后除了正常用法,經(jīng)常用來將對象轉(zhuǎn)換為。
看jquery源碼看到的,學(xué)習(xí)一下:
Array.prototype.slice.call(arguments,0)該語句涉及兩個(gè)知識點(diǎn)。
arguments是一個(gè)關(guān)鍵字,代表當(dāng)前參數(shù)
知識點(diǎn)1、call()的用法
var a = function(){ console.log(this); // "littledu" console.log(typeof this); // Object console.log(this instanceof String); // true } a.call("littledu");
知識點(diǎn)2、slice( )的用法
slice( ) returns a string containing a slice, or substring, of string.
It does not modify string。 slice()返回一個(gè)子片段,對原先的string沒有影響,還可以用負(fù)數(shù)當(dāng)參數(shù)。
//string.slice(start,end),如果end這個(gè)參數(shù)沒有被設(shè)置,則返回從start開始到最后 var s = "abcdefg"; s.slice(0,4) // Returns "abcd" s.slice(2,4) // Returns "cd" s.slice(4) // Returns "efg" s.slice(3,-1) // Returns "def" s.slice(3,-2) // Returns "de" s.slice(-3,-1) // Should return "ef"; //Array.slice() var a = [1,2,3,4,5]; a.slice(0,3); // Returns [1,2,3] a.slice(3); // Returns [4,5] a.slice(1,-1); // Returns [2,3,4] a.slice(-3,-2); // Returns [3];
除了正常用法,slice 經(jīng)常用來將 array-like 對象轉(zhuǎn)換為 true array。在jquery框架就有這種用法。
Array.prototype.slice.call(arguments,0);//將參數(shù)轉(zhuǎn)換成真正的數(shù)組
call的作用是改變this的指向,就相當(dāng)于arguments調(diào)用了,slice這個(gè)方法。0就是start=0,end沒指定,所以返回整個(gè)arguments,這個(gè)時(shí)候就轉(zhuǎn)換成數(shù)組了。
為什么不直接這樣
arguments.slice(0)
因?yàn)椋耗苡胹lice方法的,只要有l(wèi)ength屬性就行。雖然arguments有l(wèi)ength屬性,但是沒有slice方法,所以呢,Array.prototype.slice()執(zhí)行的時(shí)候,Array.prototype已經(jīng)被call改成arguments了,因?yàn)闈M足slice執(zhí)行的條件(有l(wèi)ength屬性),所以沒有報(bào)錯(cuò)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/85507.html
摘要:的作用相當(dāng)于,將其轉(zhuǎn)換為布爾值。用于判斷一個(gè)變量是否某個(gè)對象的實(shí)例,如返回同時(shí)也會(huì)返回返回布爾值,如果為,則返回,否則返回的結(jié)果。 underscore.js源碼 Underscore.js 沒有對原生 JavaScript 對象進(jìn)行擴(kuò)展,而是通過調(diào)用 _() 方法進(jìn)行封裝,一旦封裝完成,原生 JavaScript 對象便成為一個(gè) Underscore 對象。 判斷給定變量是否是對象 ...
摘要:那么,它到底是如何工作的呢讓我們從一種更簡單的實(shí)現(xiàn)開始實(shí)際上這種實(shí)現(xiàn)代碼更短,并且更易讀是函數(shù)原型中的一個(gè)函數(shù),它調(diào)用函數(shù),使用第一個(gè)參數(shù)作為參數(shù),并傳遞剩余參數(shù)作為被調(diào)用函數(shù)的參數(shù)。 原文:The Most Clever Line of JavaScript 作者:Seva Zaikov 原文 最近 一個(gè)朋友 發(fā)給我一段非常有趣的 JavaScript 代碼,是他在某個(gè) 開源庫中...
摘要:方法真是一個(gè)有意思的東西,它可以改變函數(shù)調(diào)用時(shí)的值。所以前面的說法其實(shí)不對,所有的對象都可以被視為類數(shù)組,有的視為長度為的數(shù)組,沒有的,視為長度為的數(shù)組。 call方法真是一個(gè)有意思的東西,它可以改變函數(shù)調(diào)用時(shí)this的值。而我們知道,在函數(shù)里,this指向了調(diào)用這個(gè)函數(shù)的環(huán)境對象,比如一道經(jīng)典面試題: var num = 2; var obj = { num: 1, show...
摘要:首先,有兩個(gè)用法,一個(gè)是一個(gè)是,第一個(gè)返回的是字符串,第二個(gè)返回的是數(shù)組,這里我們看第個(gè)。最后,附個(gè)轉(zhuǎn)成數(shù)組的通用函數(shù)據(jù)說這樣比快 Array.prototype.slice.call(arguments) 根據(jù)call的使用方法,我們可以猜測以下可能相等: [].slice.call(arguments) => arguments.slice() 我?guī)е孟裆倭艘粋€(gè)必需參數(shù)的疑問去...
摘要:不能應(yīng)用下的等方法。首先我們可以通過給目標(biāo)函數(shù)指定作用域來簡單實(shí)現(xiàn)方法保存,即調(diào)用方法的目標(biāo)函數(shù)考慮到函數(shù)柯里化的情況,我們可以構(gòu)建一個(gè)更加健壯的這次的方法可以綁定對象,也支持在綁定的時(shí)候傳參。原因是,在中,多次是無效的。 bind 是返回對應(yīng)函數(shù),便于稍后調(diào)用;apply 、call 則是立即調(diào)用 。 apply、call 在 javascript 中,call 和 apply 都是...
閱讀 3674·2023-04-26 01:43
閱讀 3046·2021-10-14 09:42
閱讀 5732·2021-09-30 09:59
閱讀 2232·2021-09-04 16:40
閱讀 1278·2019-08-30 15:52
閱讀 899·2019-08-29 17:09
閱讀 2109·2019-08-26 13:37
閱讀 3593·2019-08-26 10:20