javascript - js this的疑问
ringa_lee
ringa_lee 2017-04-11 10:15:33
[JavaScript讨论组]

为什么this在不同的情况下得到的值不同
<script>

        /*<li class='whh' onclick="test1()" onclick="test2(this)"><a><img src="" alt=""></a></li>*///这样的结构
        var a = document.getElementsByClassName('whh');
        for(var i=0;i<a.length;i++){
            console.log(a[i].getElementsByTagName("img")[0].src)
            a[i].onclick = function (e) {
                console.log(this)//this是li
            }
        }
        function test1() {
            console.log(this)//this是win
        }
        function test2(that) {
            console.log(that)//this是li
        }
    </script>
ringa_lee
ringa_lee

ringa_lee

全部回复(5)
巴扎黑

大家讲道理

普通函数执行this指向全局对象,对象方法执行this指向该对象

https://developer.mozilla.org...
https://developer.mozilla.org...

迷茫

要说明白this,就要先说明白函数(设函数为f())。

每一个函数在执行的时候,都关联着一个上下文对象(可以理解为在哪个对象上执行该函数,这里记为obj)。

其中调用方式有很多, 比如:

  • obj.f(): 最常用的使用点操作符调用函数

  • new f(): 创建一个新的obj, 并且调用函数

  • f.call() 和 f.apply(): 指定某一个特定的obj(第一个参数)

另外,如果没有指定上下文对象的话,比如直接调用f(),那么系统会使用globle,而在浏览器环境中,这个globle就是window对象。

这个上下文对象,就是this。

迷茫

贴个链接把 http://zonxin.github.io/post/...

伊谢尔伦

二楼正解,如果是一个纯函数里面的this,要看谁调用,this就会指向谁,不过在定时器中,this指向的却是window

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

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