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