javascript - this的用法?
伊谢尔伦
伊谢尔伦 2017-04-10 16:56:55
[JavaScript讨论组]
 我想把第四行的link[i] 替换成this指代结果发现不行?
 this不是指代这个i吗?
  为什么第五行的 showPic(this) 可以使用?
  是不是因为作用域的问题?

  var gallery = document.getElementById("imagegallery");
  var links = gallery.getElementsByTagName("a"); //a元素的集合
  for ( var i=0; i < links.length; i++) {  //a元素遍历
    links[i].onclick = function() {   //我想把本行的link[i] 替换成this指代结果发现不行?
      return showPic(this);
    }
    links[i].onkeypress = links[i].onclick;
  }
  
  
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(11)
天蓬老师

兄弟!是不是用JQuery用惯了:

$('a').each(function() {
    $(this).dosomething();
});

额 你还是好好看看《Javascript权威指南》吧!

<script>
    // 如果你的上述的代码在这里
    // 这里this === window
    
    function ABC() {
    }
    
    ABC.prototype.foo = function() {
        console.log(this);
    };
    
    var s = new ABC();
    s.foo();    // 这时候foo函数里面的this指向s
    
    var obj = {
        abc: 23,
        name: 'dfdf'
    };
    
    s.foo.call(obj) // 这里foo函数里面的this指向obj
</script>

想讲明白,不容易,关键靠悟。

天蓬老师

for语句不具有作用域限制

PHP中文网

那个匿名函数里的this能用,是因为这个匿名函数是绑定在links[i]上的方法。
外面的thislinks[i]一毛钱关系没有。

大家讲道理

请看这里 MDN

PHP中文网

for并不是一个函数,
在一个函数里的this是指谁调用这个函数,那么这个this就是指的谁,全局作用域里的this指的是window

ringa_lee

与作用域无关。
函数中的this指向调用函数的对象,即为函数所附属的对象。

  • 如果楼主贴的代码没有方法体包裹,第四行的this指向全局对象,在浏览器环境下就是window对象。

  • 第五行所在的方法是links[i]这个节点对象的方法,因此this是links[i]。

js的函数根据运行环境会产生不同的执行上下文(函数内部this的指向不同),而call & apply 函数可以改变运行环境。可以试着理解这几个相关的概念。

PHP中文网

同学,为何会觉得用this可以替换这个link[i]?这里的 this 是什么?输出来看过了没?

PHP中文网

这里用this.onclick,this指代的是全局windiw下挂载一个函数onclick。

怪我咯

this是指调用某个函数的那个对象,建议你看看书打好基础。

大家讲道理

this的作用域指向的是调用当前方法的对象,第四行如果换成this的话指向的是全局作用域,调用show()时指向的是调用show方法的对象,基础太差了,好好补补基础吧

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

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