位置: 编程技术 - 正文

谈谈JavaScript中的几种借用方法(请问在javascript程序中)

编辑:rootadmin

推荐整理分享谈谈JavaScript中的几种借用方法(请问在javascript程序中),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript的语句,javascript的语句,简述javascript,javascript的理解,请问在javascript程序中,简要说明javascript的作用,javascript的理解,简要说明javascript的作用,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

通过call()、apply()和bind()方法,我们可轻易地借用其它对象的方法,而无须从这些对象中继承它。

在JavaScript中借用方法

在JavaScript中,有时可以重用其它对象的函数或方法,而不一定非得是对象本身或原型上定义的。通过 call()、apply() 和 bind() 方法,我们可轻易地借用其它对象的方法,而无须继承这些对象。这是专业 JavaScript 开发者常用的手段。

原型方法

在 JavaScript 中,除了不可更改的原始数据类型,如 string、number 和 boolean,几乎所有的数据都是对象。Array 是一种适用于遍历和转换有序数列的对象,其原型上有 slice、join、push 和 pop 等好用的方法。

一个常用的例子是,当对象和数组都是列表类型的数据结构时,对象可以从数组“借用”方法。最常借用的方法是 Array.prototype.slice。

借用方法之所以可行,是因为 call 和 apply 方法允许在不同上下文中调用函数,这也是重用已有功能而不必继承其它对象的好方法。实际上,数组在原型中定义了很多常用方法,比如 join 和 filter 也是:

可以看出,不仅对象可以借用数组的方法,字符串也可以。但是因为泛型方法是在原型上定义的,每次想要借用方法时都必须使用 String.prototype 或 Array.prototype。这样写很??拢?芸炀突崃钊松?帷8?行У姆椒ㄊ鞘褂米置媪坷创锏酵??哪康摹?/p>

使用字面量借用方法

字面量是一种遵循JavaScript规则的语法结构,MDN 这样解释:

谈谈JavaScript中的几种借用方法(请问在javascript程序中)

在JavaScript中,使用字面量可以代表值。它们是固定值,不是变量,就是在脚本中按字面给出的。字面量可以简写原型方法:

这样看上去没有那么冗长了,但是必须直接在 [] 和 "" 上操作以借用方法,仍然有点丑。可以利用变量保存对字面量和方法的引用,这样写起来更简便些:

有了借用方法的引用,我们就可以轻松地使用 call() 调用它了,这样也可以重用代码。秉着减少冗余的原则,我们来看看可否借用方法却不用每次调用都要写 call() 或者 apply():

如你所见,现在可以使用 Function.prototype.call.bind 来静态绑定从不同原型“借来的”方法了。但是 var slice = Function.prototype.call.bind(Array.prototype.slice) 这句话实际是如何起作用的呢?

理解 Function.prototype.call.bind

Function.prototype.call.bind 乍一看有些复杂,但是理解它是如何起作用的会非常有益。

Function.prototype.call 是一种引用,可以“call”函数并将设置其“this”值以在函数中使用。注意“bind”返回一个存有其“this”值的新函数。因此 .bind(Array.prototype.slice) 返回的新函数的“this”总是 Array.prototype.slice 函数。

综上所述,新函数会调用“call”函数,并且其“this”为“slice”函数。调用 slice() 就会指向之前限定的方法。

自定义对象的方法

继承很棒,但是开发者通常在想要重用一些对象或模块间的通用功能时才会使用。没必要仅为代码重用使用继承,因为在多数情况下简单的借用方法会很复杂。

之前我们只讨论了借用原生方法,但是借用任何方法都是可以的。比如下面的代码可以计算积分游戏的玩家分数:

虽然上面的例子很生硬,但是可以看出,就像原生方法一样,用户定义的方法也可以轻松借用。

总结

Call、bind 和 apply 可以改变函数的调用方式,并且经常在借用函数时使用。多数开发者熟悉借用原生方法,但是较少借用自定义的方法。

近几年 JavaScript 的函数式编程发展不错,怎样使用 Function.prototype.call.bind 借用方法才更加简便?估计这样的话题会越来越常见。

标签: 请问在javascript程序中

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

上一篇:浅谈js基本数据类型和typeof(js数据的基本类型有哪些)

下一篇:关于JavaScript限制字数的输入框的那些事(js限制数组长度)

  • 当月只有进项税额月末怎么办
  • 公司对个人的欠款怎么发律师函给他
  • 税务师考试的报名费怎么还没有退成功
  • 房地产购买材料财务报销单上怎么写
  • 建筑工程发票来自哪里
  • 清包工可以有一部分小料吗
  • 资产评估费怎么收
  • 税控盘丢失需要罚款吗
  • 委外加工税点
  • 其他应收款有什么业务
  • 普通增值税发票可以抵税吗?
  • 住房贷款利息专项附加扣除是返钱吗
  • 承兑 拆分
  • 预付的固定资产没有收到发票怎么入账
  • 电信线路租用的手机
  • 业务宣传费超出部分以后年度怎样处理
  • 特许权使用费如何确认收入
  • 企业所得税权责发生
  • 免交的增值税怎么退
  • 普通发票要纳税吗
  • 酒店挂账要做收款凭证吗
  • 企业所得税汇算清缴扣除比例
  • 本年固定资产投资额与不良贷款的关系
  • 投资性房地产的后续计量从成本模式转为公允价值模式的
  • 为什么贷款利息变高了
  • 拿库存商品抵债怎么做账
  • 年终一次性奖金个税计算
  • mac dns 设置
  • PHP:mb_strtolower()的用法_mbstring函数
  • 苹果mac双系统按住哪个键
  • php字符串定义
  • 收到进项税发票如何入账
  • 马哈拉施特拉邦人口
  • yolov5损失
  • html怎么做
  • 建筑工程房屋租赁费属于什么费用
  • h5页面内嵌到微信
  • 办公室装修款怎么做账
  • 印花税计提比例是多少
  • 收到销售方的负债怎么办
  • 建筑工程拨款流程
  • 小规模纳税人在什么情况下会成为一般纳税人
  • 计提坏账准备不会影响应收账款账面价值
  • 基础的数据类型
  • 销售收入未开票
  • 不在经营范围内经营违反了什么法
  • 直接人工成本的计算公式
  • 固定资产分期付款会计处理?
  • 业务活动成本和管理费用能不能写在一起
  • 购入的设备用于研发怎样记账
  • 银行电子承兑到期了怎么兑现操作
  • 增值税期末留抵退税附加税退还吗
  • 租赁业发票
  • 企业所得税费用标准
  • 股权转让怎么入账
  • 银行存款的收付应严格执行()的规定
  • 外贸企业需要取得什么资质
  • mysql error0
  • 恢复mysql数据库
  • sqlsever导入数据时出现ole db连接数据无效
  • 如何启动vmware authorization service
  • 萝卜家园系统安装教程
  • vc运行程序exe停止工作怎么办
  • 微软正式推送windows11
  • ubuntu20.4 ssh
  • linux 下MySQL服务器的启动与停止
  • win 10系统怎么提高网速
  • win8怎么把网速调到最快
  • rsa加解密过程是什么
  • 批处理应用实例
  • shell字符串操作命令
  • css中标签
  • python用于读取文本文件内容的方法
  • Node.js中的全局对象有
  • android layout布局
  • android使用红杏代理更新sdk
  • 浙江税务客服咨询电话
  • 办理跨区域事项报验
  • 香港买iphone要交多少税
  • 广东省国家税务总局稽查局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设