javascript - 事件函数中this指向
欧阳克
欧阳克 2017-06-26 10:52:55
[JavaScript讨论组]

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    
    <h2 onmousedown = "f1(this)">事件中的this</h2>

    <script type="text/javascript">
        
        var h2 = document.getElementsByTagName('h2')[0];
        
        //HTML方式绑定
        function f1(obj){
            console.log(obj);
        }
        f1( this );
        
        /*
        //DOM 0级绑定方式
        h2.onclick = function(){
            console.log(this);
        }
        
        //DOM 2级方式
        h2.addEventListener('mouseover',function(){
            console.log(this);
        });
        */
    </script>
    

</body>
</html>
欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

全部回复(6)
为情所困

javascript的this跟函数定义在哪里无关,跟谁调用它有关。

高洛峰

h2那里因为是绑定在事件上的,因此 this 指向的是这个元素,你可以简单理解为是


var dom = document.getElementsByTagName('h2')
dom.onmousedown = function(){
    f1(this)
}
代言

http://www.cnblogs.com/soulii...看看这个

漂亮男人

前者相当于`请输入代码

var h2 = document.querySelectorAll("h2")[0];
function fn(){
    console.log(this);
}
h2.onmousedown = fn;
window.fn();

this指向调用它的对象,你定义在全局环境里的变量和函数默认是window对象下得属性和方法,所以当你在全局环境中执行fn()时this指向window

代言

你获取到哪个dom,就是对应的this。

PHP中文网

这两个不是一回事呀。

<h2 onmousedown="f1(this)"></h2>
h2.onmouseover=f1()
h2.addEventListern(f1)

这三种方式都是为h2绑定了一个mouseover事件发生时的名为f1回调函数,事件绑定的回调函数指向DOM元素本身。

你问题中的

//HTML方式绑定
function f1(obj){
  console.log(obj);
}
f1( this );

这段程序是在window作用域下运行的,this自然就指向window。这段代码跟h2无关了(未绑定)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号