讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别_javascript技巧

第一件事情.
this 指钟是JavaScript语言中的一个特殊指钟,他在代码运行时,指向调用this语句的当前对象.
如果是事件绑定函数,则指向被绑定的元素本身.
<script type="text/javascript">
//by Go_Rush(阿舜) from  http://ashun.cnblogs.com/
alert(this===window)  //true  直
接调用的时候,指向window本身
var gorush={
    f:function(){
        alert(this===gorush)    //true
    }
}
gorush.f()   //指向 gorush对象
document.onclick=function(){   
    alert(this===document)  //true ,指向 document
}
/*
element.onclick=function(){
    alert(this===element)     //true
}
*/
</script>
特别要值得注意的是,当多个对象嵌套的时候, this 是指向最近调用它的那个对象的
obj1={
    obj2:{
        f:function(){
            alert(this===obj1.obj2)  //这里 this 并不是指向 obj1的哦。
        }
    }
}
obj1.obj2.f()
再举一个非常容易出错的例子,  点这里看相关链接
<script type="text/javascript">
//by Go_Rush from http://ashun.cnblogs.com/
//以下gorush1中 this的用法是错误的,这个错误10个程序员6个犯
var gorush1={
    showMsg:function(){alert("hello,world")},
    doAjax:function(){
        new Ajax.Request("index.php",{onSuccess:function(){
            this.showMsg()
        }})
    }         
}
//gorush2中的才是对的
var gorush2={
    showMsg:function(){alert("hello,world")},
    doAjax:function(){
        var self=this;    //备份 gorush2对象 
        new Ajax.Request("index.php",{onSuccess:function(){
            self.showMsg()
        }})
    }         
}
</script>

第二件事情:
   闲话不多说,先上碟小菜.
<script type="text/javascript">
var btn=null
window.onload=function(){
    btn=document.getElementById("btn")    
    if (window.attachEvent) btn.attachEvent("onclick",gorush);
    if (window.addEventListener) btn.addEventListener("click",gorush,false)
}
function gorush(){
    if (this===window) alert("this==window")   //ie6.0下,这句会执行
    if (this===btn)        alert("this==btn")        //ff1.5下,  这句会执行
}
</script>
<input type="button" value="click me" id="btn">
真不明白为什么 ie 会这样搞,让人很郁闷啊,为什么把 this 指向 window呢?
解决方法:
1. 事件绑定的时候不要用 attachEvent, 可怜的我,当时就是用的prototype.js的Event.Observe方法
这样 element.onclick=function.....  这样在两个浏览器中 this 指钟都指向 element
2. 在处理函数 gorush中 用 getEvent()方法统一获取事件,然后在用 evt.srcElement || evt.target 获取 element对象

时间: 2024-11-20 14:59:21

讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别_javascript技巧的相关文章

编程思想与编程技法是相互影响的两件事,然而也是不可拆分的一回事儿!

编程思想与编程技法是相互影响的两件事,然而也是不可拆分的一回事儿! 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 良好的编程习惯坚持久了,会自动升华: 不好的邋遢习惯拖得过久,会困顿不堪! 编

马云:两件事让我不爽支付宝股权当时快气死我了

阿里巴巴董事局主席马云(TechWeb配图)银行不改变,我们就来改变银行--颠覆了零售业,改造着物流业,马云又开始挑战金融业.他是个不愿意安分坐着的人,时不时坐到桌子上,两条腿晃来荡去.他今天的工作,就是想明天会怎么样.如同梁启超在<少年中国说>里所言:惟思将来也,事事皆其所未经者,故常敢破格马云1964年出生,现任阿里集团董事局主席.他最耿耿于怀两件事.第一件,"和雅虎合作8年,换了9任CEO,什么事也谈不成,太刺激我了". 所以现在,他坚持合伙人制度.因为"进

美媒称美国人最担心中国两件事:经济和网络安全

外媒称,关于中国,美国最担心两件事:经济和网络安全. 据美国<基督教科学箴言报>网站9月9日报道,皮尤研究中心新报告显示,67%的美国成年人认为,北京持有大量美国债券是一个"非常严重"的问题,60%的人对美国因这个亚洲国家损失大量就业机会而不安.排名第三的是来自中国的网络袭击.6月份有报道称,美国联邦政府工作人员受到了数据袭击,很多专家认为袭击来自中国,即使在此事曝光之前,就有54%的被调查人员认为中国网络袭击非常值得担忧. 报道称,这些数据凸显困扰美国人的事情发生了重大改

昨天互联网理财圈发生了两件事

昨天互联网理财圈发生了两件事,一件事是余额宝宣布规模超过2500亿元,另一件是微信的"理财通"上线. 两件事放在一起对比有些看头,折射出来的是两个层面的竞争,第一个层面是支付宝和微信的竞争,都在抢占移动支付的领地,第二个层面是余额宝的合作方天弘基金和理财通的合作方华夏基金之间的竞争,因为同样是在昨天,天弘基金的资产规模已经超过华夏基金成为国内第一大基金公司. 但是对于我们普通用户来说,好处是多了一个选择,当初你把银行存款拿出来放在余额宝,现在你要不要考虑把余额宝的钱拿出来放在理财宝?

支付宝总裁樊治铭:在物流POS战略实施中支付宝只做两件事

3月19日消息,支付宝启动物流POS战略,宣布向中国电商COD市场投资5亿元,推动整个电商COD体系发展.支付宝副总裁樊治铭表示,支付宝发力物流POS支付未来专注两件事,分别是做好物流POS支付方案和支付宝POS设备布建投资. 樊治铭称,支付宝开始关注COD市场,发现市场COD支付方案未能很好的需求客户与用户需求,主要表现为配送收银时,不能实现配送签收信息的同步传送,而且许多COD服务也不能提供POS刷卡应用.为此,支付宝市场投资5亿元推动整个COD体系软硬环境的改善. 樊治铭说,在这个物流PO

我微信粉丝快速增长的方法 只做两件事

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 10个月时间,必途微信粉丝从2000到60万的超级增长率,一个主做职场.测试类的微信只坚持做了两件事,自己第一次真切的体会到了坚持.关注和持续执行力的神奇.本文章只分享干货,力求言简意赅,只做两件事. 第一件事,找最好的文章,什么样的文章是最好的文章,我这里的定义,只看阅读量,只有被用户认可的文章才是最好的文章,最好的文章从哪里来,怎么筛选,

微信营销不神秘!来说说微信营销的两件事

编者按:微信5.0增加了很多新功能,接近5亿的用户让培训机构看到了机会,但多数仍然不得其法.基于微信的社会化营销到底该怎么做?微格网际合伙人杨光,在最近的"狼群沙龙-如何玩转线上招生"活动中,分享了很多内容,以下为演讲全文:在座的各位都有微信吧,有培训机构开了自己的公众账号的吗?恩,5个:公众账号有专人维护吗?1个:通过微信转化成交的有吗,没有.一个定性的分析是,现在微信是移动互联网上平台级.最大的应用,微信的朋友圈是所有社交类应用回流量最大的.pc时代QQ是最大的,但手q拼不过微信.

使用超大规模云系统 企业要做两件事

超大规模计算有十分诱人的前景,并且几乎每个人对其发展前景都有自己的见解. 亚马逊.谷歌.Facebook和微软通过选择分布式和松耦合的架构实现了巨大的效率提升. 与这些大规模架构相反,数据中心架构历来青睐高可用性系统,它们将存储.计算和网络部署在成千上万商用服务器节点上. 这些超大规模先驱甚至针对特别的需求设计自己的服务器.交换机和存储节点.使得云服务可以很容易地随着需求增加而扩容,按需无缝添加资源. 他们使用先进的纠错技术分配数据,从而获得容错能力.这种方式利用庞大的服务器规模有效弥补无法使用

关于javascript DOM事件模型的两件事_javascript技巧

事件捕捉(Event Capture)的实现问题 W3C DOM Level2的事件模型规范中,事件在DOM树中的传播过程(从根节点到目标节点)被分为了两个阶段:捕捉(Capture)和冒泡(Bubbling).下面这个图能大概的说明整个过程: (from W3C) 如果想创建一个捕捉事件,在支持W3C 事件模型的浏览器中,将addEventListener的第三个参数设为true就好了.例如: 复制代码 代码如下: document.getElementById('foo').addEvent