位置: 编程技术 - 正文

javascript中call apply 与 bind方法详解

编辑:rootadmin

推荐整理分享javascript中call apply 与 bind方法详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。

call()

call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。

当调用一个函数时,可以赋值一个不同的 this 对象。this 引用当前对象,即 call 方法的第一个参数。

通过 call 方法,你可以在一个对象上借用另一个对象上的方法,比如Object.prototype.toString.call([]),就是一个Array对象借用了Object对象上的方法。

语法 fun.call(thisArg[, arg1[, arg2[, ...]]])thisArg在fun函数运行时指定的this值。需要注意的是下面几种情况

(1)不传,或者传null,undefined, 函数中的this指向window对象 (2)传递另一个函数的函数名,函数中的this指向这个函数的引用,并不一定是该函数执行时真正的this值 (3)值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象,如 String、Number、Boolean (4)传递一个对象,函数中的this指向这个对象

arg1, arg2, ...指定的参数列表。

例子初级应用例子

使用call方法调用匿名函数并且指定上下文的this

在下面的例子中,当调用 greet 方法的时候,该方法的 this 值会绑定到 i对象。

使用call方法调用匿名函数

在下例中的for循环体内,我们创建了一个匿名函数,然后通过调用该函数的call方法,将每个数组元素作为指定的this值执行了那个匿名函数。这个匿名函数的主要目的是给每个数组元素对象添加一个print方法,这个print方法可以打印出各元素在数组中的正确索引号。当然,这里不是必须得让数组元素作为this值传入那个匿名函数(普通参数就可以),目的是为了演示call的用法。

使用call方法调用函数传参数

apply()

语法与 call() 方法的语法几乎完全相同,唯一的区别在于,apply的第二个参数必须是一个包含多个参数的数组(或类数组对象)。apply的这个特性很重要,

javascript中call apply 与 bind方法详解

在调用一个存在的函数时,你可以为其指定一个 this 对象。 this 指当前对象,也就是正在调用这个函数的对象。 使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,而不用在新对象中重复写该方法。

语法:fun.apply(thisArg[, argsArray])注意: 需要注意:Chrome 以及 Internet Explorer 9 仍然不接受类数组对象。如果传入类数组对象,它们会抛出异常。

参数thisArg

同上call 的thisArg参数。

argsArray

一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 fun 函数。如果该参数的值为null 或 undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。

例子

使用apply来链接构造器的例子

你可以使用apply来给一个对象链接构造器,类似于Java. 在接下来的例子中我们会创建一个叫做construct的全局的Function函数,来使你能够在构造器中使用一个类数组对象而非参数列表。

使用apply和内置函数

聪明的apply用法允许你在某些本来需要写成遍历数组变量的任务中使用内建的函数。在接下里的例子中我们会使用Math.max/Math.min来找出一个数组中的最大/最小值。

参数数组切块后循环传入

bind

bind() 函数会创建一个新函数(称为绑定函数)

bind是ES5新增的一个方法传参和call或apply类似不会执行对应的函数,call或apply会自动执行对应的函数返回对函数的引用语法 fun.bind(thisArg[, arg1[, arg2[, ...]]])

下面例子:当点击网页时,EventClick被触发执行,输出JSLite.io p1 p2, 说明EventClick中的this被bind改变成了obj对象。如果你将EventClick.bind(obj,'p1','p2') 变成 EventClick.call(obj,'p1','p2') 的话,页面会直接输出 JSLite.io p1 p2

兼容

兼容例子来源于: Array 上扩展一个 forEach

JavaScript中setTimeout和setInterval函数的传参及调用 如何向setTimeout、setInterval传递参数看如下代码:varstr='aaa';varnum=2;functionauto(num){alert(num);}setTimeout('auto(num)',);这样写是可以正常工作的,但是如其说这

举例说明JavaScript中的实例对象与原型对象 首先声明:javascript中每个对象都有一个constructor属性和一个prototype属性。constructor指向对象的构造函数,prototype指向使用构造函数创建的对象实例的原型

JavaScript操作HTML DOM节点的基础教程 因为DOM的存在,这使我们可以通过JavaScript来获取、创建、修改、或删除节点。NOTE:下面提供的例子中的element均为元素节点。获取节点父子关系element.par

标签: javascript中call apply 与 bind方法详解

本文链接地址:https://www.jiuchutong.com/biancheng/369987.html 转载请保留说明!

上一篇:javascript事件绑定学习要点

下一篇:举例说明JavaScript中的实例对象与原型对象(举例说明Java实现适配器模式)

  • 回退税款所属期后怎么返回
  • 公共电话亭是否应该被拆除
  • 视同销售的增值税如何计算
  • 往来账款怎么做
  • 代发工资记什么科目
  • 企业发生事故后的处理流程
  • 企业重组失败会怎么样
  • 固定资产的折旧方法一经选定,不得随意变更
  • 没有土地使用证可以过户吗
  • 房地产预售房收入如何缴纳增值税
  • 一般纳税人增值税优惠政策
  • 经营租赁融资租赁增值税税率
  • 税款多交一分钱怎么做分录
  • 一般纳税人的含税收入怎么算
  • 采购发票几个点的税
  • 长期借款利息的会计分录
  • 企业所得税的减按征收如何计算
  • 土地划转到子公司要多久
  • 税收完税证明是契证吗
  • 出纳应做到
  • 鼠标玩游戏飘怎么回事
  • windows更新暂停怎么恢复
  • aspnet_admin.exe进程是安全的吗 aspnet_admin进程信息查询
  • 进程program
  • opware12.exe - opware12进程是什么文件 有什么用
  • 若依框架前后端一体化设计管理系统
  • php单独运行
  • 应发工资扣税
  • 企业购厂房会计分录
  • 前端页面加载缓慢怎么办
  • 增值税专用发票电子版
  • 发票点击了打印,然后怎么修改
  • 一岁宝宝喝红糖姜水
  • 税款入库期是什么意思
  • 前端bs是什么
  • javafiles
  • 解压包的命令
  • thinkphp6多表关联查询
  • 公司股票买卖账务处理
  • SQL Server 2016的数据库对象有那些?
  • python 添加列表
  • 购货方开工具红包怎么开
  • 增值税纳税申报类型怎么填
  • 出售固定资产不能作为企业的收入
  • 公司帮员工全额买社保该怎么入账?
  • 收到房租的租金怎么做账
  • 用友t6操作流程
  • 房屋开发企业
  • 退回多交的所得税抵欠税怎么做账
  • 个体生产经营所得税
  • 研发支出费用化和资本化的界定
  • 实际开票金额比外经证金额大
  • 当月作废的采购发票已认证账务如何处理?
  • 转账支票的特点有哪些
  • 列举2-4种特殊销售方式,其销售额如何确认?
  • 全额工资和实发工资
  • 工程公司本月没发工资
  • windows 9
  • Windows Server 2008故障转移群集简介
  • 如何更改centos的语言
  • win8.1系统安装
  • linux安装dns软件包
  • 在linux中使用ssh远程调试后目标板的输出在哪里
  • win10预览版21337
  • ES6 javascript中class静态方法、属性与实例属性用法示例
  • [置顶] [寒江孤叶丶的Cocos2d-x之旅_29]在Cocos2d-x中集成protobuf (Protocol Buffers)
  • cocos2d-x教程
  • unity游戏开发入门经典
  • vue eventhub
  • css 分页
  • 使用NGUI时遇到物理引擎错误
  • lint 工具
  • jquery验证邮箱格式
  • 横向对比分析两个人关系的意义
  • python tornado django
  • 亲测源码论坛
  • 中国个人所得税是多少?
  • 企业科研经费管理制度
  • 个人所得税自行纳税申报表(A表)怎么填写
  • 浙江税务网上开票流程图
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设