资讯专栏INFORMATION COLUMN

Array.prototype.slice.call

iamyoung001 / 1380人阅读

摘要:看源码看到的,学习一下该语句涉及两个知识点。是一个关键字,代表当前参数知识点的用法知识点的用法。返回一个子片段,对原先的没有影响还可以用负数当参数。如果这个参数没有被设置,则返回从开始到最后除了正常用法,经常用来将对象转换为。

看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属性),所以没有报错。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85507.html

相关文章

  • 关于一些前端js框架的源码研究

    摘要:的作用相当于,将其转换为布尔值。用于判断一个变量是否某个对象的实例,如返回同时也会返回返回布尔值,如果为,则返回,否则返回的结果。 underscore.js源码 Underscore.js 没有对原生 JavaScript 对象进行扩展,而是通过调用 _() 方法进行封装,一旦封装完成,原生 JavaScript 对象便成为一个 Underscore 对象。 判断给定变量是否是对象 ...

    whjin 评论0 收藏0
  • 魔幻语言 JavaScript 系列之 call、bind 以及上下文

    摘要:那么,它到底是如何工作的呢让我们从一种更简单的实现开始实际上这种实现代码更短,并且更易读是函数原型中的一个函数,它调用函数,使用第一个参数作为参数,并传递剩余参数作为被调用函数的参数。 原文:The Most Clever Line of JavaScript 作者:Seva Zaikov 原文 最近 一个朋友 发给我一段非常有趣的 JavaScript 代码,是他在某个 开源库中...

    cuieney 评论0 收藏0
  • Array.prototype.slice及其他Array方法

    摘要:方法真是一个有意思的东西,它可以改变函数调用时的值。所以前面的说法其实不对,所有的对象都可以被视为类数组,有的视为长度为的数组,没有的,视为长度为的数组。 call方法真是一个有意思的东西,它可以改变函数调用时this的值。而我们知道,在函数里,this指向了调用这个函数的环境对象,比如一道经典面试题: var num = 2; var obj = { num: 1, show...

    yibinnn 评论0 收藏0
  • Slice无参调用可以将类数组对象(含有length属性)转化成数组

    摘要:首先,有两个用法,一个是一个是,第一个返回的是字符串,第二个返回的是数组,这里我们看第个。最后,附个转成数组的通用函数据说这样比快 Array.prototype.slice.call(arguments) 根据call的使用方法,我们可以猜测以下可能相等: [].slice.call(arguments) => arguments.slice() 我带着好像少了一个必需参数的疑问去...

    MudOnTire 评论0 收藏0
  • JS中的call、apply、bind方法详解

    摘要:不能应用下的等方法。首先我们可以通过给目标函数指定作用域来简单实现方法保存,即调用方法的目标函数考虑到函数柯里化的情况,我们可以构建一个更加健壮的这次的方法可以绑定对象,也支持在绑定的时候传参。原因是,在中,多次是无效的。 bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。 apply、call 在 javascript 中,call 和 apply 都是...

    zombieda 评论0 收藏0

发表评论

0条评论

iamyoung001

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<