首页 > this的用法?

this的用法?

 我想把第四行的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;
  }
  
  

for语句不具有作用域限制


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


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


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


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

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


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


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


兄弟!是不是用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>

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


请看这里 MDN


大元旦的都还在回答问题,大家都辛苦了,一人给个赞!


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

【热门文章】
【热门文章】