this指向


直接上代码,凑合着看

<input type="button" onclick="page()" value="点我"></input>
<input type="button" value="点我2号" id="btn"/>
<input type="button" value="点我3号" id="btn2"/>
<input type="button" value="点我测试addEventListener传参" id="btn-parem"/>
<input type="button" value="我是ie终结者,赶紧点我" id="ie-end"> <script>
//该函数用于测试页面上的this对象
function page(){
console.log(this==window)
// true 说明页面上绑定的事件的作用域都是window,这样很不好,因为有时候我们是希望我们的this值就是当前的对象而不是window
} var btn=document.getElementById("btn");
btn.onclick=function(){
console.log(this);
// 这个时候就正常了,输出的this指向的是当前的input对象
}; var btn2=document.getElementById("btn2");
function btnClick(){
console.log(this)
// 很明显这也是正常的
}
btn2.addEventListener("click",btnClick,false); // 关于addEventListener我们再扯一个,怎么往addEventListener里面的函数传参
var btnParem=document.getElementById("btn-parem")
function pare(a,b){
console.log(a+b)
}
// btnParem.addEventListener("click",pare(1,2),false)
// 亲,很明显这种写法是不行的,因为我还没点击事件就已经自动执行了 btnParem.addEventListener("click",function(){pare(1,9)},false) // 注意,关于attachEvent该事件是ie特有的绑定事件方式,同时该事件以及渐渐的被抛弃,在最新的ie edge中已经没有了该事件转而支持addEventListener
// 同时,在ie 9 10中也已经支持addEventListener事件
var ieEnd=document.getElementById("ie-end")
function ending(){
console.log(this)
// 在支持该事件的浏览器下输出window
}
ieEnd.attachEvent("onclick",ending)
</script>

怎么向addEventListener中传入event对象


<input type="button" id="btn" value="测试"/>

var btn=$("#btn");
btn.onclick=function(e){
console.log(e);
}

这样的写法是正常的,可以正确的传入e,换成addEventListener的情况就是这样写

function func(e){
console.log(e);
}
btn.addEventListener("click",func,false)

此时可以看到,我们并没有显式的向func中传入参数e。那么当我们想传参的时候应该怎么写呢

function func(e,a,b){
console.log(e);
console.log(a+b);
}
btn.addEventListener("click",function(e){
func(e,1,2);
},false);

这就是正确的写法,使用一个匿名函数包住我们的func,同时在匿名函数中传入参数e

探究绑定事件的this指向以及event传参的小问题的更多相关文章

  1. 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题

    1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...

  2. 使用addEventListener绑定事件是关于this和event记录

    DOM元素使用addEventListener绑定事件的时候经常会碰到想把当前作用域传到函数内部,可以使用以下两种放下: var bindAsEventListener=function (objec ...

  3. html 中绑定事件 this的指向

    var m=function(){ alert(2);    }    var obj={        A:function(){        },        m:function(){    ...

  4. jQuery 为动态添加的元素绑定事件

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

  5. jQuery绑定事件的on()

    jQuery绑定事件 语法:$(selector).on(event,childselector,function(){}); 可以为自身的加事件(一个或多个)  也可以为其子元素加事件(一个或多个) ...

  6. Chrome插件Visual Event查看Dom元素绑定事件的利器

    找这工具找了好久,统一找着了,开发人员不可多得的好东东,收藏做一下分享. 用Chrome插件Visual Event查看Dom绑定的事件 Visual Event简介 Visual Event是一个开 ...

  7. jquery 绑定事件 获取方式 --------------data event 获取

    //绑定事件 bind event $("body").on("click",function(){ console.log("in") } ...

  8. 冒泡,setinterval,背景图的div绑定事件,匿名函数问题探究

    1.会冒泡到兄弟元素么? $(function(){ $("#a").click(function(){alert("a")}) $("#b" ...

  9. JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数

    下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...

随机推荐

  1. BI系统的应用组织思路与数据分析模式

    BI商业智能软件一般都会提供若干数据整合.数据查询.分析与评价.数据可视化及数据分享的手段,但是在BI项目的构建与实施过程中,如果不按照一定的应用组织思路.数据分析模式及分析流程使用这些工具或手段,呈 ...

  2. bootstrap固定响应式导航

    <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.2.0/css/bootstrap. ...

  3. [译]Stairway to Integration Services Level 7 - SSIS 工作流管理中级

    介绍 前一个章节我们对SSIS的优先约束做了初步了解,并且实验了MaxConcurrentExecutables 包属性的设置. 本文将测试“On Success”, “On Completion”, ...

  4. POJ 3903 Stock Exchange (E - LIS 最长上升子序列)

    POJ 3903    Stock Exchange  (E - LIS 最长上升子序列) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. linux驱动: 如何向模块传递参数, module_param和module_param_array

    如何向模块传递参数,Linux kernel 提供了一个简单的框架.    1.  module_param(name, type, perm); name 既是用户看到的参数名,又是模块内接受参数的 ...

  6. 关于android的坑

    坑1: 使用SQLiteOpenHelper的时候如果建立的表中存在不为空的字段,但是用ContentValues()的方式来插入数据的话恰好没有往这个字段里插入数据,那么执行后市没法往数据库里插入数 ...

  7. Tortoisegit 记住用户名和密码

    Tortoisegit 记住用户名和密码方法: [Windows系统] 当你配置好git后,在 C:\Documents and Settings\Administrator\ 目录下有一个  .gi ...

  8. github每次push都需要密码以及用户名的解决办法

    git remote set-url origin git@github.com:你的账户/项目名称.git就可以直接git push origin master了.

  9. USB接口定义

    一般的排列方式是:红白绿黑从左到右 定义: 红色-USB电源 标有-VCC.Power.5V.5VSB字样 绿色-USB数据线(正)-DATA+.USBD+.PD+.USBDT+ 白色-USB数据线( ...

  10. ZOJ3640-Help Me Escape

    Help Me Escape Time Limit: 2 Seconds      Memory Limit: 32768 KB Background     If thou doest well, ...