函数apply()和call()的详细介绍


当前第2页 返回上一页

1

2

3

4

var arr1 = [1, 2, 3];

var arr2 = [66, 99, 131];

Array.prototype.push.apply(arr1, arr2);

console.log(arr1);

同样将arr2数组作为参数传递。

而对于无序,相互之间没有什么关联的参数,就使用call()

获取数组的最大值和最小值

1

2

3

4

5

6

7

8

9

10

var arr = [0, 1, 2, 3, 4];

 

//获取最大数

var max1 = Math.max.apply(Math, arr),

    max2 = Math.max.call(Math, 0, 1, 2, 3, 4),

 

    //获取最小数

    min1 = Math.min.apply(Math, arr),

    min2 = Math.min.call(Math, 0, 1, 2, 3, 4);

console.log(max1, max2, min1, min2);

arr本身是没有Math方法的,但是我们可以用call或者apply使用其方法

判断对象的具体类型

1

2

3

4

//验证对象的具体类型

var arr = [];

var type = Object.prototype.toString.call(arr);

console.log(type);// [object Array]

在使用typeof时得到的结果都是Object,无法判断具体是哪一种类型。于是可以用 Object.prototype.toString.call()来获得具体类型。当然,前提是toSting()方法没有被重写过

将类数组对象转为真正的数组,通常我们使用Array.prototype.slice.call() 来转换

1

2

3

4

5

6

7

8

9

var arrLike = {

    length: 3,

    0: '值1',

    1: '值2',

    2: '值3'

}

var newArr = [].__proto__.slice.call(arrLike);

var type = Object.prototype.toString.call(newArr);

console.log(newArr, type); //[ '值1', '值2', '值3' ] '[object Array]'

当然,splice,concat也可以将类数组对象转数组.

这里普及一下类数组对象
通过索引访问元素,并且拥有length属性
也就是说,需要满足两个条件,1.使用序号定义属性,2.拥有length属性,属性值为元素个数
在使用序号定义属性时,建议从0开始按顺序定义属性。否则会出现数组元素为empty的情况

1

2

3

4

5

6

7

8

9

var arrLike = {

    length: 3,

    0: '值1',

    1: '值2',

    3: '值3'

}

var newArr = [].__proto__.slice.call(arrLike);

var type = Object.prototype.toString.call(newArr);

console.log(newArr, type); //[ '值1', '值2', empty] [object Array]

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!

以上就是函数apply()和call()的详细介绍的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

javascript背景图片怎么导入

javascript在nodejs环境下执行机制和事件循环

javascript预编译做了啥

javascript中load用法是什么

javascript怎么添加元素

javascript加载:defer与async

javascript中const和object.freeze()的差异

深入分析javascript的module模式编程

一起看看 php javascript 语法对照

javascript中this的用法有哪些

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    暂无评论...