javascirpt
的類數組對象能夠像數組同樣使用for循環遍歷,可是卻不能調用數組原型鏈的方法,爲了讓類數組對象能夠像數組對象同樣調用push
,pop
等方法,能夠將類數組對象轉成數組對象:javascript
將類數組對象轉換成數組
var args = []; var obj = {0:"www",1:"jianshu",2:"com",length:3}; for (var i = 0; i < obj.length; i++) { args.push(obj[i]); } console.log(args); //["www","jianshu","com"] //等價於如下的寫法 console.log([].slice.call(obj)); //["www","jianshu","com"]
理解[].slice.call(arguments)
的原理,須要明白:css
Array.prototype.slice()
console.log([1,2,3,4,5].slice(0,1)); //[1] console.log([1,2,3,4,5].slice(1,3)); //[2,3] console.log([1,2,3,4,5].slice(3)); //[4,5] console.log([1,2,3,4,5].slice()); //[1,2,3,4,5]
數組的slice(start,end)
方法,返回從start
開始到end
的子數組,若是start
和end
都沒有設置,則返回整個數組,這個過程不影響原數組。java
Function.prototype.call()
function func(name, price) { this.name = name; this.price = price; } var food = {name:"apple",price:10}; func.call(food,"orange",15); console.log(food); // {name: "orange", price: 15}
調用call
方法傳入的參數比原方法多一個參數,簡單來講,call
方法的做用就是:用call
方法的第一個參數
代替func
方法內部的this
,其餘參數爲原func
方法的參數。git
slice方法內部實現
爲了提升性能,減小一層對原型鏈的追溯,通常咱們會採用如下的寫法
:Array.prototype.slice.call(arguments)