全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

彻底搞懂JavaScript中的apply和call方法(必看)

call和apply都是为了改变某个函数运行的context上下文而存在的,即为了改变函数体内部this的指向。因为JavaScript的函数存在定义上下文和运行时上下文以及上下文是可以改变的概念。

回到目录定义

fun.apply(thisArg, [argsArray])
fun.call(thisArg, arg1,arg2, ...)

其中thisArg可以为null或undefined,此时表示全局对象,更详细见MDN:apply()、call()

二者的作用完全一样,只是接受参数的方式不太一样。例如,有一个函数定义如下:

var func1 = function(arg1, arg2){};

可以通过func1.call(this, arg1, arg2);或者func1.apply(this, [arg1, arg2])来调用。其中this是你想指定的上下文,它可以是任意一个JavaScript对象(JavaScript一切皆对象),call需要把参数传递进去,而apply则把参数放在数组里。

因为在JavaScript中,某个函数的参数数量是不固定的,当你的参数明确知道数量时,用call,而不确定的时候用apply,然后把参数push进数组传递进去。当参数数量不确定时,函数内部也可以通过arguments这个数组来遍历所有的参数。

回到目录一个例子

在JavaScript OOP中,我们经常会这样定义:

funciton programmer() {
}

programmer.prototype = {
  hobby: 'programming',
  say.function() {
    alert('I love' + this.hobby);
  }
}

var xiaoMing = new programmer();
xiaoMing.say();

此时如果我们有一个设计妹子对象xiaoHua = {hobby: 'designing'};我们不想对它重新定义say方法,那么我们可以通过call或apply使用xiaoMing的say方法:xiaoMing.say.call(xiaoHua)。

由此可看出,call和apply都是为了动态改变this而出现的,当一个object没有某个方法或属性时,但是其他的对象有,则可以借助call或apply来使用其他对象的方法来操作。

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

两者都是把obj(即this)绑定到thisObj,这时候thisObj具备(或继承)了obj的属性和方法

其中比较常见的,通过document.getElementByTagName选择的节点是一种类数组,它不能应用Array下的push,pop等方法。但我们可以通过:

var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));

Array.prototype.slice.call能所有具有length属性的对象转为数组,这样domNodes就可以应用Array下的所有方法了。

以上这篇彻底搞懂JavaScript中的apply和call方法(必看)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js中的call和apply  # JS中call()和apply()的功能及用法实例分析  # js中call()和apply()改变指针问题的讲解  # js中apply()和call()的区别与用法实例分析  # js中apply与call简单用法详解  # 详解JS中的this、apply、call、bind(经典面试题)  # 详解js中的apply与call的用法  # JS中改变this指向的方法(call和apply、bind)  # JS call()及apply()方法使用实例汇总  # 都是  # 可以通过  # 给大家  # 有一个  # 放在  # 不太  # 遍历  # 其他的  # 你想  # 我们可以  # 而不  # 希望能  # 它可以  # 这篇  # 不确定  # 则可  # 必看  # 对它  # 方法来  # 经常会 


相关文章: 实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何用景安虚拟主机手机版绑定域名建站?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  定制建站哪家更专业可靠?推荐榜单揭晓  Python多线程使用规范_线程安全解析【教程】  制作公司内部网站有哪些,内网如何建网站?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  建站之星导航菜单设置与功能模块配置全攻略  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何撰写建站申请书?关键要点有哪些?  如何通过商城自助建站源码实现零基础高效建站?  微信推文制作网站有哪些,怎么做微信推文,急?  建站主机数据库如何配置才能提升网站性能?  如何构建满足综合性能需求的优质建站方案?  广州美橙建站如何快速搭建多端合一网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  企业微网站怎么做,公司网站和公众号有什么区别?  如何登录建站主机?访问步骤全解析  如何零成本快速生成个人自助网站?  h5在线制作网站电脑版下载,h5网页制作软件?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  香港服务器租用每月最低只需15元?  个人网站制作流程图片大全,个人网站如何注销?  香港服务器部署网站为何提示未备案?  建站之星安装模板失败:服务器环境不兼容?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  常州自助建站费用包含哪些项目?  定制建站策划方案_专业建站与网站建设方案一站式指南  建站之星伪静态规则如何正确配置?  如何用免费手机建站系统零基础打造专业网站?  电商平台网站制作流程,电商网站如何制作?  广州商城建站系统开发成本与周期如何控制?  如何通过多用户协作模板快速搭建高效企业网站?  建站VPS选购需注意哪些关键参数?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  非常酷的网站设计制作软件,酷培ai教育官方网站?  简历在线制作网站免费版,如何创建个人简历?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  高防服务器如何保障网站安全无虞?  如何在新浪SAE免费搭建个人博客?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  制作网站的模板软件,网站怎么建设?  如何通过wdcp面板快速创建网站?  寿县云建站:智能SEO优化与多行业模板快速上线指南  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。