给事件处理函数传参数

Zigbee——串口无线透传分析 当设备接收到无线数据后,操作系统会将该数据封装成一个消息然后放入消息队列中,同时设置系统事件SYS_EVENT_MSG ,应用层的事件处理函数 SampleApp_ProcessEvent 会处理这个事件,他首先会将消息从消息队列中取出,根据消息的 ID 判断该消息是否就是接收到的数据,标识接收到新数据的消息 ID 是 AF_INCOMING_MSG_CMD,其中 AF_ INCOMING_MSG_CMD 的值是 0x1a,这是在 ZigBee 协议栈中定义好的,用户不可更改。透传就是透明传输的简称。 阅读详情

给事件处理函数传参数

今天刷百度前端学院的任务,遇到了一个问题,需要给事件处理函数传参数;我把问题抽象成下面问题:

var lis = document.getElementsByTagName('li');
for(var i=0; i<lis.length; i++){
  this.i=i;
  btn.addEventListener('click',handler.bind(this));
}
//我想在事件处理函数里面获得i。
function handler(e){
    this.i;
}

ES5中bind()解决:

解决方法,将事件处理函数的上下文绑定到for循环里面的this;事件处理函数的上下文不在是btn对象;

分析一下原理,首先详细研究一下bind函数;
bind函数用于将当前函数和指定对象绑定,返回一个新的函数,当新函数被调用时,代码会在指定对象的上下文中执行。
语法为:

bar.bind(上下文参数, 普通参数1, 普通参数2, …);普通参数将传入bar函数。

用jQuery中$.proxy()方法解决;

jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。

jQuery.proxy( function, context )
function将要改变上下文语境的函数。
context函数的上下文语境(this)会被设置成这个 object 对象。

jQuery.proxy( context, name )
context函数的上下文语境会被设置成这个 object 对象
name将要改变上下文语境的函数名(这个函数必须是前一个参数 ‘context’ 对象的属性)

这个方法通常在向一个元素上附加事件处理函数时,上下文语境实际是指向另一个对象的情况下使用。

var obj = {
name: "John",
test: function() {
alert( this.name );
$("#test").unbind("click", obj.test);
}
};

$("#test").click( jQuery.proxy( obj, "test" ) );


// 以下代码跟上面那句是等价的:
// $("#test").click( jQuery.proxy( obj.test, obj ) );


// 可以与单独执行下面这句做个比较。
// $("#test").click( obj.test );

jQuery 源码之 proxy:
使用 apply 形式, 执行回调函数.

jQuery.proxy = function( fn, proxy, thisObject ) {
    if ( arguments.length === 2 ) {
        // jQuery.proxy(context, name);
        if ( typeof proxy === "string" ) {
            thisObject = fn;
            fn = thisObject[ proxy ];
            proxy = undefined;


            /* 转化结果:
                thisObject -> context
                fn -> name
                proxy -> undefined
             */
        }
        // jQuery.proxy(name, context);
        else if ( proxy && !jQuery.isFunction( proxy ) ) {
            thisObject = proxy;
            proxy = undefined;
        }
    }
    if ( !proxy && fn ) {
        /* 使用 proxy 保证 函数执行时, context 为指定值 */
        proxy = function() {
            return fn.apply( thisObject || this, arguments );
        };
    }
    // Set the guid of unique handler to the same of original handler, so it can be removed
    if ( fn ) {
        proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
    }
    // So proxy can be declared as an argument
    return proxy;
}

其实就是平常使用的的call和apply,大部分的时候作为回调使用。

在stackoverflow上有个问题,其中的例子比较典型,供参考:
比如有如下代码:

$('#myElement').click(function() {
        // In this function, "this" is our DOM element.
    $(this).addClass('aNewClass');
});

这里的this就是我们的DOM元素。如果我们要在增加class样式之前需要等待一段时间,可能会将代码写成下面这样(注意:有问题的代码)

$('#myElement').click(function() {
    setTimeout(function() {
          // Problem! In this function "this" is not our element!
        $(this).addClass('aNewClass');
    }, 1000);
});

这里的this就不是我们期望的那个DOM元素了。解决方法就是使用jQuery的$.proxy()了,代码如下:

$('#myElement').click(function() {
   // give $.proxy our function,
    setTimeout($.proxy(function() {
        $(this).addClass('aNewClass');  // Now "this" is again our element
    }, this), 1000);
   // and tell it that we want our DOM element to be the value of "this" in the function
});

我们可以这样来理解上面的代码:

function() {
    // func is the function we gave to $.proxy
    func.apply( ctx );
    //  ctx is the value we wanted for "this" (our DOM element)
}

这就体现出来jQuery中$.proxy()的强大功效了。

注意:在jQuery 1.6及之后的版本中,除了上面提到的两种用法之外,proxy还增加了其他两种用法:

jQuery.proxy( function, context [, additionalArguments ] )
jQuery.proxy( context, name [, additionalArguments ] )
掌握React组件的Props参数化和事件处理 本文深入探讨React中组件的Props参数化和事件处理机制。首先介绍了如何通过props向组件传递数据,并解释了props与HTML属性的相似之处。接着,详细说明了如何在JSX中传递和接收props,包括对ES6解构赋值的使用。最后,阐述了在React单向数据流架构中,子组件如何通过回调函数与父组件进行通信。 阅读详情

相关推荐

c# 事件传值

使用事件传值是不同form之间共享数据,并同时更改不同form显示内容。

Vue中如何绑定事件 传递参数

vue绑定事件 v-on

xiaowude_boke的博客 1540

js绑定事件,并动态传参

js绑定事件,并动态传参,比如绑定click事件。js绑定事件,并动态传参,比如绑定click事件。 js绑定事件,并动态传参,比如绑定click事件

【学习笔记】15-v-on的传递参数时注意的问题

v-on需要传递参数时需要注意的问题 1.当没有参数传递时,方法名称后面可以不加小括号 2.当需要传递参数时,且只有一个参数需要传递,而没有进行传递,会默认输出浏览器的event对象 3.当需要传递多个参数时,想要获取浏览器的event对象,需要在前面加$符号 代码示例 <div id="app"> <button type="button" @click="btnClick1()">按钮1</button> <!-- v-on事件监听的时候,需要传递参数,后面才会

wersdf22的博客 301

QT窗体大小控制全攻略:从setFixedSize到事件过滤器的进阶用法

本文深入探讨了QT窗体尺寸控制的进阶实践,从基础的setFixedSize方法到结合事件过滤器实现智能动态适配。通过分析窗口状态变化、多显示器环境处理以及布局策略,提供了实现禁止缩放但支持最大化、多屏智能适配及动态约束等复杂场景的完整解决方案与核心代码示例。

weixin_29229261的博客 299

PlutoSDR在matlab中的环境配置(包括驱动和硬件支持包)

双击下载到的驱动,除了点击接受协议和设置安装路径,其他只要点击下一步或者安装即可。登录或者注册你的账号,选择你的matlab版本(这里我的是2023b),点击下一步。设置安装路径,并选择我接受,点击下一步,即可安装完成,并在安装路径中得到。完成后,打开设备管理器,在端口和通用串行总线设备一栏,即可看见下图。点击进入,选择相应的系统安装包,这里我选择的Windows。可看到我们要安装的Pluto支持包,安装即可。右击桌面matlab,选择打开文件所在位置。右上角搜索pluto,选择并点击下一步。

weixin_53160338的博客 4865

vue基础语法总结

vue基础语法(更新中)

Lyy_ID的博客 321

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 463

『VUE』09. 事件传参(详细图文注释)

『VUE』09. 事件传参(详细图文注释)

MZH 2217

游戏开发实战:如何用旋转矩阵实现2D角色平滑转向(附Unity代码)

本文深入探讨了在Unity游戏开发中,如何运用旋转矩阵原理实现2D角色的平滑转向。文章从核心理论出发,提供了计算目标旋转、实现平滑插值(Lerp与SmoothDamp)的完整C#代码,并解决了与动画系统、物理引擎协同的常见难题,帮助开发者提升游戏操作手感与视觉流畅度。

weixin_29057237的博客 287

毕业设计——基于卷积神经网络的高速公路团雾智能识别系统设计与实现(数据集+源码+可视化+综述)

同时,也可以结合其他技术,如雷达、红外传感器等,实现多源信息的融合与协同处理,提高系统的可靠性和稳定性。实验结果表明,该系统能够实现对高速公路团雾的准确、快速识别,为高速公路的安全运行提供了有力保障。团雾作为一种常见的气象现象,具有突发性、局地性和消散迅速的特点,对高速公路的行车安全构成严重威胁。通过设计合适的网络结构,如增加卷积层、池化层等,实现对图像中团雾特征的自动学习和提取。预处理:对采集到的图像进行去噪、增强等预处理操作,以提高图像质量,降低后续处理的难度。读取数据,随机分为训练集和验证集。

abackcab的博客 667

【微信小程序】事件传参的两种方式

事件传参:在触发事件时,将一些数据作为参数传递给事件处理函数的过程,就是事件传参在微信小程序中,我们经常会在组件上添加一些自定义数据,然后在事件处理函数中获取这些自定义数据,从而完成业务逻辑的开发.小程序进行事件传参的时候,除了使用data-*属性传递参数外,还可以 使用 mark 标记传递参数mark 是一种自定义属性,可以在组件上添加,用于来识别具体触发事件的 target 节点。同时 mark 还可以用于承载一些自定义数据然后通过事件对象进行获取自定义数据,在组件上使用mark:自定义属性。

云泽野の编程日记 3555

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2750

给百度地图覆盖物添加事件处理函数传参数

给事件处理函数传参数 今天刷百度前端学院的任务,遇到了一个问题,需要给事件处理函数传参数;我把问题抽象成下面问题: var lis = document.getElementsByTagName(‘li’); for(var i=0; i<lis.length; i++){ this.i=i; btn.addEventListener(‘click’,handler.bind(this));...

dxyzhbb的博客 1458

在 SAP Fiori 里玩转 Manage Views:把过滤器与列表布局固化成你的默认工作台

本文介绍了SAP Fiori应用中"Manage Views"功能的核心价值和使用方法。该功能允许用户保存和复用个性化界面设置,包括筛选条件、列布局等,将重复操作简化为一次性配置。文章从技术实现、用户操作和治理建议三个维度展开: 功能本质:View存储的是界面状态而非业务模型,是提升个人生产力的工具 核心价值:固化高频操作,支持默认视图设置,实现"开箱即用"的工作状态 操作指南:详细说明了收藏、重命名、设为默认、自动应用等关键功能 治理建议:区分标准视图、个人视图和公

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)

在第一个脉冲期间,天线 1 通过天线 N-1 接收的杂波返回与第二个脉冲期间天线 2 通过天线 N 接收的杂波返回相同。该算法可能需要搜索角度和多普勒的所有组合来定位目标,但对于示例,由于确切知道目标的位置,因此可以将处理器定向到该点。然而,接收到的信号不仅包含来自目标的反射回波,还包含来自被照亮地表的回波。然而,由于干扰器的白噪声性质,接收到的干扰信号占据了整个多普勒频段。在以下部分中,您将模拟来自目标、杂波和干扰器的返回,并说明 STAP 技术如何过滤来自接收信号的干扰。假设元件间距是波形波长的一半。

珞瑜的博客 7135

React事件处理函数中同时传event和其他参数

三种方式实现事件处理函数中同时传event和其他参数 1.通过bind绑定 2.箭头函数回调 3.返回函数的柯里化形式 // 代码示例 class LoginForm extends React.Component { state = { username: '', password: '', phone: '' } // 表单提交 formSubmit = (event) => { e

Se7en's Blog 1569

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

vue事件处理参数中,既想传 event事件对像,又想传自定义形参的解决

注意, 上面的情况是 绑定是没有传参的, vue会自动传入 event 对象, 但是, 如果在 绑定时传入了参数。当我们在的事件处理函数中,如果绑定是不加参数, 就可以在使用时得到 event 对像,如下图。此时, 我们在绑定是传入了参数, 那么在调用的时候,就不会有 event 对象了。以上方法可能会在小程序中有点问题,如我们在使用 uniapp + vue的时候。上面的这个方法是一个通用的方法, 小程序 或都 vue 中都是可以通用的。方法: 在绑定函数时 ,第一个参数名称 必需是。

hjh15827475896的博客 483

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vue中,子组件向父组件(子传父)使用$emit,传递一个或多个参数

vue

weixin_44867717的博客 9872

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

前端实习第4天--支付宝小程序事件绑定及组件传值

事件绑定 小程序的事件绑定和正常的事件绑定使用起来差不多,不过小程序的事件绑定不能传参数,只能通多data-参数名来传给函数,再通过默认的e事件对象来获取数据。 下面以一个小案例来演示: 需求:输入一个数,在下面显示出来,两个按钮,分别对输入的数进行+、-操作 axml代码: <view> 需求:输入一个数,在下面显示出来,两个按钮,分别对输入的数进行+、-操作 </view> <view> <input placeholder="Inp

qq_43957263的博客 4937

iView多个Pages使用同一个触发器翻页@on-change,js箭头函数异步传参数

js箭头函数异步传参数,复用一个翻页触发器

LbJ_MVP的博客 428

taro 如何使用dom_taro 事件处理 - osc_w6qmyr6s的个人空间 - OSCHINA - 中文开源技术交流社区...

Taro 元素的事件处理和 DOM 元素的很相似。但是有一点语法上的不同:Taro 事件绑定属性的命名采用驼峰式写法,而不是小写。 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串 (DOM 元素的写法)。 例如,传统的微信小程序模板:Activate LasersTaro 中稍稍有点不同:Activate Lasers在 Taro 中另一个不同是你不能使用 catch...

weixin_39639653的博客 105

【Vue】事件处理

Vue事件的基本使用1.使用v-onxxx或@xxx绑定事件,其中xxx是事件名2.事件的回调需要配置在methods对象中,最终会在vm上3.methods中配置的函数,不需要箭头函数!否则this就不是vm了4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm或组件实例对象;5.@click=“demo”和@click=“demo($event)”效果一致,但后者可以传递参数...

Vae12138的博客 182

[react] 在React中怎么将参数传递给事件?

[react] 在React中怎么将参数传递给事件? 如果使用箭头函数声明函数,调用方式: 不传参:this.func1,如果不传参,事件参数默认会自己添加上 传参: (e) => {this.func1(e,'param1', 'param2')},如果传参,事件参数需要手动传递过来 func1 = (e, param1, param2) => { console.log(e); console.log(param1); console.

歌谣的博客 485

小程序开发总结五 单选 下拉框 路径动态传值

单选 <view class='parameter-wrap'> <block wx:for="{{parameter}}" wx:key="parameter"> <text class='parameter-info text-over {{item.checked?"checked_parameter":""}}' data-id...

小羽向前跑 424
上一篇: javascript中的“this”总结
下一篇: 深入理解css之 —— absolute定位
景洪在编程
博客等级 码龄9年 13粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值