位置: 编程技术 - 正文

浅谈javascript的call()、apply()、bind()的用法(javascript用处)

编辑:rootadmin

推荐整理分享浅谈javascript的call()、apply()、bind()的用法(javascript用处),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript的用处,javascript概述及作用,javascript+,javascript cgi,javascriptz,javascript cgi,javascriptz,javascript cgi,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript中的函数不仅是一种类似于Java中方法的语言功能,它还可以作为对象而存在。 本文将要探讨JavaScript中函数的一些特殊用法,包括call、apply、bind三个原型方法。一、函数基础JavaScript中的函数是一种类似于Java中方法的语言功能,不过它可以独立于类进行定义。

函数式编程:由于JavaScript支持匿名函数,因此可以将函数作为对象来使用, 所以JavaScript不仅支持过程式编程(面向对象也是过程式编程的一种),还支持函数式编程。上下文

函数的每次调用都会拥有一个特殊值——本次调用的上下文(context)——这就是this关键字的值。 如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法。当通过这个对象来调用函数时,该对象就是此次调用的上下文, 也就是该函数的this的值。

需要注意,this是一个关键字,不是变量,也不是属性名。JavaScript的语法不允许给this赋值。

函数是一种对象

JavaScript中的函数和Java中的方法或C语言中的函数最大不同在于,JavaScript中的函数也是一种对象。 但这并不意味着,所有的对象都是函数。函数是一种包含了可执行代码,并能够被其他代码调用的特殊的对象。

和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。 - 如果嵌套函数作为方法调用,其this的值指向调用它的对象。 - 如果嵌套函数作为函数调用,其this的值不是全局对象(非严格模式下)就是undefined(严格模式下)。

很多人误以为调用嵌套函数时this会指向掉i用外层函数的上下文。如果你想访问这个外部函数的this值, 需要将this的值保存都在一个变量中,这个变量和内部函数都同在一个作用域内。例如:

闭包

JavaScript的函数可以嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的任何变量。 这意味着JavaScript函数构成了一个闭包(closure),它给JavaScript带来了非常强劲的编程能力。

作为值的函数在JavaScript中,函数不仅是一种语法,也是值,也就是说,可以将函数赋值给变量,存储在对象的属性或数组的元素中, 作为参数传入另外一个函数等。

浅谈javascript的call()、apply()、bind()的用法(javascript用处)

bind、call、apply每一个函数都包含一个prototype属性,这个属性是指向一个对象的引用,这个对象称作“原型对象”。 每一个函数都包含不同的原型对象。当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。

Function.prototype.call()和Function.prototype.apply()

call()和apply()可以看作为某个对象的方法,通过调用方法的形式来间接调用函数。 它们的第一个参数是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对它的引用。 apply()方法和call()方法的作用相同,只不过函数传递的方式不一样,它的实参都放入在一个数组中。

举个例子,以对象o的方法的形式调用函数f(),并传入两个参数,可以使用这样的代码:

再举一个例子,使用call方法调用匿名函数:

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

Function.prototype.bind()

bind()是在ES5中新增的方法,从名字可以看出,这个方法的主要作用就是将函数绑定到某个对象。 当在函数f()上调用bind()方法并后窜入一个对象o作为参数,这个方法将返回一个新函数: (以函数调用的方式)调用新的函数将会把原始的函数f()作为o的方法来调用。例如:

其实我们可以轻松的实现bind()方法:

二、函数式编程JavaScript并非函数式编程语言,但在JavaScript中可以像操控对象一样操控函数,也就是说可以在JavaScript中应用函数式编程技术。

使用函数处理数组

假设有一个数组,数组元素都是数字,我们想要计算这些元素的平均值和标准差。

var stddev = Math.sqrt(deviations.map(square).reduce(sum)/(data.length - 1));高阶函数

高阶函数就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数。举个例子:

函数not()是个高阶函数,因为它返回一个新的函数,这个新函数将它的实参传入f(),并返回f的返回值的逻辑非。

标签: javascript用处

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

上一篇:EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)(easyui 弹框)

下一篇:详谈javascript异步编程(js异步编程的四种方法)

  • 其他收益是什么类
  • 本期已认证但不想抵扣申报表怎么填写
  • 银行承兑到期之前怎么兑现
  • 广告费可以预提吗
  • 营业利润为负数说明什么
  • 不开票不走公账的后果
  • 营改增后,房地产开发项目预售价如何申报
  • 装卸费可以抵扣销项税额吗
  • 重庆房产税政策历史
  • 出租房屋的房产税怎么算
  • 新办企业国税报税时间
  • 建筑劳务增值税
  • 残疾人保障金中上年在职职工人数怎么计算
  • 车间管理人员工作总结
  • 哪些资产减值损失可以 转回,哪些不能?
  • 售后回租 出租方
  • 木制手链品种
  • 公司租赁汽车
  • 启用或关闭windows功能怎么勾选
  • 联想笔记本bios密码忘记了怎么清除
  • linux如何开启端口
  • 收到客户付款 会计分录
  • php utf8转gb2312
  • php图形化编程
  • 网关设置
  • mac中的finder简介命令
  • php中的预定义变量
  • 固定资产拆除怎么处理
  • ecap.exe是什么意思
  • kafka图形化界面
  • 软件和信息技术服务业发展趋势
  • 路径规划步骤
  • Yii基于CActiveForm的Ajax数据验证用法示例
  • 帝国cms怎么用
  • 装饰工程公司施工一般包括哪些内容?
  • 个体户一直未申报会怎样
  • 交所得税怎么记账
  • python输入函数帮助
  • 个人所得税两处或两处以上工资、薪金所得纳税申报表
  • 会计核算方式有几种
  • 在建工程盘盈盘亏的账务处理
  • 企业资金管理是什么意思
  • 补贴收入是否缴纳个税
  • 小规模纳税人有哪些
  • 出口退免税的条件
  • 公司员工报销没有发票挂内账有风险吗
  • 项目支付预缴税额怎么算
  • 为什么生产成本不属于损益类科目
  • 科目余额表如何看
  • 4s店收到红字发票怎么开
  • 本期盈余结转会亏损吗
  • 季度盈利弥补以前年度亏损的账务处理
  • 一般纳税人网上申报流程
  • 购买的商品属于什么会计科目
  • 主营业务成本的贷方是什么
  • 汇算清缴资产总额全年季度平均值怎么算
  • 产品是如何产生的
  • 跨服务器访问数据库
  • win8系统打不开设置
  • fedora linux安装教程
  • win8.1 升级
  • mac系统怎么删除用户
  • xp系统纯净版gho
  • win8资源管理器未响应
  • Win10预览版镜像
  • linux查找文件语句
  • VS2012中C++,#include无法打开源文件
  • Extjs Label的 fieldLabel和html属性值对齐的方法
  • 地盘正针的详解使用
  • 用js实现类的方法
  • java对象怎么比较
  • 税务解除非正常户罚款多少
  • 济南税务开票软件是什么
  • 企业欠税交不起怎么办
  • 江苏医保网上服务大厅
  • 货车可申请停保吗
  • 扬州税务学院住宿环境
  • 银行扣账户维护费会计分录
  • 金融机构取得的利息收入应缴纳增值税的
  • 土地分割抵押 如何实现抵押权
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设