js中apply和call理解

本文详细解释了JavaScript中call和apply函数的区别与用法。两者都用于改变函数调用时的上下文,即将obj绑定到thisObj,使后者获得前者的属性和方法,并立即执行。主要区别在于参数传递方式不同,call接收连续参数,而apply接收数组形式的参数。通过实例演示了如何利用这些函数来扩展DOM节点列表的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

call和apply

用法

    obj.call(thisObj, arg1, arg2, ...);
    obj.apply(thisObj, [arg1, arg2, ...]); 

两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和
方法。或者说thisObj『继承』了obj的属性和方法。绑定后会立即执行函数。
唯一区别是apply接受的是数组参数,call接受的是连续参数。

案例,dom的nodeList集合有数组的一些基本属性但不是数组,当我们需要使用数组的map方法

    var list = document.querySelectorAll('a');//所有a标签的nodeList
    console.log(list.map)// undefined nodeList没有数组的map方法
    var test = (item)=>console.log(item)// js lambda表达式
    Array.prototype.map.call(list,test)// 打印list的元素
    console.log(list.map)//undefined 

这样就可以灵活的使用其他对象的方法而不用继承原型。

参考:http://www.cnblogs.com/52fhy/p/5118877.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值