标签:max 类型 orm argument -o containe 函数的参数 javascrip 第一个
翻看很多框架源码,jquery和zepto等等都会有这句话
Array.prototype.slice.call
百思不得其解的我们努力求证……
基本原理
对象函数
中的this注意这句话对象函数中的this
function test(a,b,c,d)
{
var arg = Array.prototype.slice.call(arguments,1);
alert(arg);
}
test("a","b","c","d"); //b,c,d
疑惑 为什么不直接用 arguments.slice(1)呢 不是一样的么,哈哈
Array.prototype.slice.call(arguments, 1)可以理解成是让arguments转换成一个数组对象,让arguments具有slice()方法
。要是直接写arguments.slice(1)会报错。
arguments 是object 不是Array ,他的原型上没有slice方法
真正原理
var a={length:2,0:‘first‘,1:‘second‘};//类数组,有length属性,长度为2,第0个是first,第1个是second
console.log(Array.prototype.slice.call(a,0));// ["first", "second"],调用数组的slice(0);
var a={length:2,0:‘first‘,1:‘second‘};
console.log(Array.prototype.slice.call(a,1));//["second"],调用数组的slice(1);
var a={0:‘first‘,1:‘second‘};//去掉length属性,返回一个空数组
console.log(Array.prototype.slice.call(a,0));//[]
function test(){
console.log(Array.prototype.slice.call(arguments,0));//["a", "b", "c"],slice(0)
console.log(Array.prototype.slice.call(arguments,1));//["b", "c"],slice(1)
}
test("a","b","c");
ps
将函数的实际参数转换成数组的方法
var args = Array.prototype.slice.call(arguments);
var args = Array.prototype.slice.call(arguments);
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
var toArray = function(s){
try{
return Array.prototype.slice.call(s);
} catch(e){
var arr = [];
for(var i = 0,len = s.length; i < len; i++){
//arr.push(s[i]);
arr[i] = s[i]; //据说这样比push快
}
return arr;
}
}
Array.prototype.slice.call()方法详解
标签:max 类型 orm argument -o containe 函数的参数 javascrip 第一个
原文地址:https://www.cnblogs.com/jing-tian/p/11770447.html