码迷,mamicode.com
首页 > 其他好文 > 详细

关于this

时间:2015-08-17 11:47:43      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

1. 不像C#,this一定是指向当前对象。js的this指向是不确定的,也就是说是可以动态改变的。call/apply 就是用于改变this指向的函数,这样设计可以让代码更加灵活,复用性更高。

   2. this 一般情况下,都是指向函数的拥有者。这一点很重要!这一点很重要!这一点很重要!

   这也是一道常见的面试题,如下代码:

技术分享
<script type="text/javascript">
  var number = 1;
  var obj = {
      number: 2,
      showNumber: function(){
          this.number = 3;
          (function(){                    
              console.log(this.number);
          })();
          console.log(this.number);
      }
  };
  obj.showNumber();
</script>
技术分享

 

   由于showNumber方法的拥有者是obj,所以this.number=3; this 指向的就是 obj 的属性 number。同理,第二个 console.log 打印的也是属性 number。

   为什么第二点说一般情况下this都是指向函数的拥有者,因为有特殊情况。函数自执行就是特殊情况,在函数自执行里,this 指向的是:window。所以第一个 console.log 打印的是 window 的属性 number。

   所以要加一点:

   3. 在函数自执行里,this 指向的是 window 对象。 

   扩展,关于this,还有一个地方比较让人模糊的是在 dom 事件里,通常有如下3种情况:

   如下:

   1. 使用标签属性注册事件,此时this 指向的是 window 对象。

   <input id="test" type="button" value="按钮" onClick="test()"/>

   function test(){alert(this)}

   2. 对于1,要让 this 指向 input,可以将 this 作为参数传递。

   3. 使用 addEventListener 等注册。此时this 也是指向 input。

   document.getElementById("test").addEventListener("click",test);

关于this

标签:

原文地址:http://www.cnblogs.com/ding1006/p/4735876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!