摘要:看源碼看到的,學習一下該語句涉及兩個知識點。是一個關鍵字,代表當前參數知識點的用法知識點的用法。返回一個子片段,對原先的沒有影響還可以用負數當參數。如果這個參數沒有被設置,則返回從開始到最后除了正常用法,經常用來將對象轉換為。
看jquery源碼看到的,學習一下:
Array.prototype.slice.call(arguments,0)該語句涉及兩個知識點。
arguments是一個關鍵字,代表當前參數
知識點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沒有影響,還可以用負數當參數。
//string.slice(start,end),如果end這個參數沒有被設置,則返回從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 經常用來將 array-like 對象轉換為 true array。在jquery框架就有這種用法。
Array.prototype.slice.call(arguments,0);//將參數轉換成真正的數組
call的作用是改變this的指向,就相當于arguments調用了,slice這個方法。0就是start=0,end沒指定,所以返回整個arguments,這個時候就轉換成數組了。
為什么不直接這樣
arguments.slice(0)
因為:能用slice方法的,只要有length屬性就行。雖然arguments有length屬性,但是沒有slice方法,所以呢,Array.prototype.slice()執行的時候,Array.prototype已經被call改成arguments了,因為滿足slice執行的條件(有length屬性),所以沒有報錯。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85507.html
摘要:的作用相當于,將其轉換為布爾值。用于判斷一個變量是否某個對象的實例,如返回同時也會返回返回布爾值,如果為,則返回,否則返回的結果。 underscore.js源碼 Underscore.js 沒有對原生 JavaScript 對象進行擴展,而是通過調用 _() 方法進行封裝,一旦封裝完成,原生 JavaScript 對象便成為一個 Underscore 對象。 判斷給定變量是否是對象 ...
摘要:那么,它到底是如何工作的呢讓我們從一種更簡單的實現開始實際上這種實現代碼更短,并且更易讀是函數原型中的一個函數,它調用函數,使用第一個參數作為參數,并傳遞剩余參數作為被調用函數的參數。 原文:The Most Clever Line of JavaScript 作者:Seva Zaikov 原文 最近 一個朋友 發給我一段非常有趣的 JavaScript 代碼,是他在某個 開源庫中...
摘要:方法真是一個有意思的東西,它可以改變函數調用時的值。所以前面的說法其實不對,所有的對象都可以被視為類數組,有的視為長度為的數組,沒有的,視為長度為的數組。 call方法真是一個有意思的東西,它可以改變函數調用時this的值。而我們知道,在函數里,this指向了調用這個函數的環境對象,比如一道經典面試題: var num = 2; var obj = { num: 1, show...
摘要:首先,有兩個用法,一個是一個是,第一個返回的是字符串,第二個返回的是數組,這里我們看第個。最后,附個轉成數組的通用函數據說這樣比快 Array.prototype.slice.call(arguments) 根據call的使用方法,我們可以猜測以下可能相等: [].slice.call(arguments) => arguments.slice() 我帶著好像少了一個必需參數的疑問去...
摘要:不能應用下的等方法。首先我們可以通過給目標函數指定作用域來簡單實現方法保存,即調用方法的目標函數考慮到函數柯里化的情況,我們可以構建一個更加健壯的這次的方法可以綁定對象,也支持在綁定的時候傳參。原因是,在中,多次是無效的。 bind 是返回對應函數,便于稍后調用;apply 、call 則是立即調用 。 apply、call 在 javascript 中,call 和 apply 都是...
閱讀 3585·2023-04-26 01:43
閱讀 2972·2021-10-14 09:42
閱讀 5404·2021-09-30 09:59
閱讀 2172·2021-09-04 16:40
閱讀 1208·2019-08-30 15:52
閱讀 822·2019-08-29 17:09
閱讀 1993·2019-08-26 13:37
閱讀 3432·2019-08-26 10:20