js 中的bind函数,常常用于改变函数中的this 指向,另一个用途是 函数柯里化,偏函数的用法;给原函数的前几个参数预设一些值, 来减少原函数中的输入参数个数。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

项目中遇到了这么一个需求: 我们知道事件的响应函数,它只有一个输入参数 event;比如:

document.addEventListener('keydown',  keydownHandler)
function keydownHandler(event) {console.log('on key down: ', event)
}

现在我需要keydownHandler能接收多个输入参数,不止是一个输入参数;同时,在某个时刻,我可以移除document上的这个监听;
虽然,我使用 js 的时间也不短了,但真不知道如何实现这个需要;经过一个对 js 有很深研究的同事的指导,发现其实应该这样做:

let onKeyDown
onKeyDown = keydownHander.bind(null, paramA, paramB, paramC)
document.addEventListener('keydown', onKeyDown)const keydownHandler = function(paramA, paramB, paramC, event) {console.log('on key down: ', paramA, paramB, paramC, event)
}// 某个时刻,需要移除监听
document.removeEventListener('keydown', onKeyDown)

这样就把原先只能接受一个 event 参数的事件响应函数 改造成了 能接收任意个参数的事件响应函数

javascript 的bind相关推荐

  1. 转:javascript方法--bind()

    javascript方法--bind() bind方法,顾名思义,就是绑定的意思,到底是怎么绑定然后怎么用呢,下面就来说说我对这个方法的理解. 语法 fun.bind(this,arg1,arg2,. ...

  2. javascript之bind使用介绍

    首先apply和call是老生常谈的东西,但是对于bind,我愣了下,因为这个词是jquery中使用频率很高的一个方法,用来给DOM元素绑定事件用的 前几天看到一个面试题,题目是这样的: 请你说说对j ...

  3. JavaScript中bind的用法

    在JavaScript中,bind()方法用于创建一个新函数,该函数在调用时将其this关键字设置为提供的值,并将其作为参数传递给bind()方法.这是一种常见的技术,通常用于在事件处理程序中更改函数 ...

  4. 详解javascript的bind方法

    JS的bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用. 通过bind可解决两个 ...

  5. javascript的bind方法

    2019独角兽企业重金招聘Python工程师标准>>> // Define the original function. var checkNumericRange = functi ...

  6. javascript的bind方法绑定深入理解

    一.方法介绍function.bind(thisArg[,arg1[,arg2[,argN]]])1.方法绑定在thisArg对象上.2.可以绑定参数,用于返回值方法的下一步参数 var checkN ...

  7. JavaScript中bind函数的使用

    bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数,函数体内的this对象的值会被绑定到传入bind()第一个参数的值,当然这是绑定哦,不是像call.apply一样直接执行,a ...

  8. 【JavaScript】bind函数是怎么实现的 手动实现bind函数

    手动实现bind函数 bind函数语法 函数内的this指向 原理分析 1.bind函数是函数调用的,而js中函数可以视作对象,当bind作为对象方法时,函数内部this指向该对象本身,那么此时调用t ...

  9. JavaScript中 bind函数的实现

    bind函数的实现 bind可以分为多次传入参数,bind是返回绑定this之后的函数 Function.prototype.mybind = function(thisArg,...argArray ...

最新文章

  1. php-7.3.13 configure: error: Please reinstall the libzip distribution
  2. 遥感图像处理-阴影检测
  3. 【网页前端设计Front end】CSS入门(看不懂你来打我)
  4. ios开发 多人语音聊天_在 Unity 多人游戏中实现语音对话
  5. oracle唯一索引能删除吗,Oracle:ora-02429:无法用于删除强制唯一/主键的索引 解决...
  6. 菜鸟的MySQL学习笔记(三)
  7. Windows核心编程_Visual Studio2019找不到MFC项目
  8. Linux 上的数据可视化工具
  9. 43特征01——特征值、特征向量、特征值与特征向量的判定、矩阵与线性变换的特征关系、方阵的迹、特征多项式、Hamilton-Cayley 定理、特征值和特征向量基本性质、谱分解、奇异值分解
  10. wps个人免费版支持宏操作
  11. 七个习惯之三:要事第一
  12. idm下载速度只有几十kb idm下载速度慢解决办法
  13. 常见网络延迟测量方法
  14. CTFd+CTFd-whale动态靶机环境搭建
  15. 电路设计_铝电解电容的失效原因
  16. Speedoffice(PPT)如何做动画演示效果
  17. 用计算机弹出当当当,电脑发出“当当”的声音怎么办
  18. 水到底是一种液体还是两种液体
  19. 基于JAVAWEB技术的网上珠宝系统的设计与实现
  20. java五子棋_java实现五子棋

热门文章

  1. 东芝笔记本linux系统安装驱动,东芝笔记本自带蓝牙在Ubuntu中的驱动问题修复方法...
  2. 设置网络适配器IP优先级
  3. Aimp3的播放列表 按评分排序 落雨
  4. 【学者风采】沈向洋 清华大学
  5. [思维导图]Free Ur Mind-推荐使用FreeMind工具
  6. ThinkPad T400s之Windows 7系统安装指南(转)
  7. 高校动态|清华大学团队:人脸识别技术,爆出巨大丑闻!
  8. 控制微电机综合实验装置,步进电动机,直流伺服电机,交流伺服电机QY-DQJ02
  9. 【激光SLAM】 01 cartographer环境建立以及建图测试(详细级)
  10. 平面纹理与球面纹理映射关系