关于javascript:如何理解Arrayprototypeslicecallarguments

Array.prototype.slice.call(arguments) 通常用于将参数arguments强制转化为数组。

slice()办法可从已有的数组中返回选定的元素。所以这句代码能够等价为[].slice.call(arguments);slice()为Array原型上的一个办法,调用者沿着原型链向上寻找。slice办法的外部实现原理为

Array.prototype.slice = function(start,end){
     var result = new Array();
     start = start || 0;        // 如果不传则取默认值
     end = end || this.length;  // 如果不传则取默认值

     //this指向调用的对象,当用了call后,可能扭转this的指向,也就是指向传进来的对象,这是要害
     for(var i = start; i < end; i++){
          result.push(this[i]);
     }
     return result;
}

而call是为了扭转调用者的外部this指向,用法:

call(this,arg1,arg2);

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理