类数组对象是如何调用原生数组方法的?



 function obj(){
    var args=Array.prototype.slice.call(argumens);
    console.log(args);
}
obj("h","e","l","l","o");   //输出 ["h","e","l","l","o"];

arguments 是函数内置的类数组对象。文章详见 函数内置arguments

那么在obj函数内部的


 arguments={
    0:"h",
    1:"e",
    2:"l",
    3:"l",
    4:"o",
    length:5
};

这里 Array.prototype.slice.call(arguments) 的内部是如何执行的才会输出 ["h","e","l","l","o"] 的?

apply JavaScript call apply方法

吱喲喲的鱼竿儿 9 years, 11 months ago

先看下我对 apply、call和bind这三个你可能感兴趣的理解,然后或许你就懂了你要问的了, http://www.cnblogs.com/skylor/p/4723612.html

IceLady answered 9 years, 11 months ago

可通过call或者apply方法,对象冒充

Alert answered 9 years, 11 months ago

作为js开发者,你的关注点在“为什么会那样输出”上可能更合适;

首先你要了解一下“鸭子类型”;

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”;

Loxias answered 9 years, 11 months ago


 function slice(arrayObjects,start,end){
    var resultArray=[];
    var endIndex=end||arrayObjects.length-1;
    var startIndex=start;
    if(endIndex>=arrayObjects.length){
        endIndex=arrayObjects.length-1;
    }
    for(var i=startIndex;i<=endIndex;i++){
        resultArray.push(arrayObjects[i]);
    }

    return resultArray;
}

忽然有一天 answered 9 years, 11 months ago

Your Answer