面向对象--第三弹this

2017-04-20  本文已影响0人  赵BW

在前面的文章里提到了this,今天就详细的说下吧。
怎么判断this是指向谁的--谁调用了这个方法这个this就指向谁
在创建一个对象的时候有this,那他到底是什么?

  function Person(name){
        this.name = name;
        console.log(this);
  }
  var zhaobw = new Person("zhaobw");
  console.log(zhaobw);

运行后得到的结果:


运行后的结果

得出一个结论:this指向的是生成的对象。

那普通的函数函数的this指向谁?
  function test(){
      console.log(this);
  }
  test();

运行后得到的结果

运行后的结果

得出一个结论:

setTimeout、setInterval
  document.addEventListener('click', function(e){
      console.log(this);//this 指向doucment
      setTimeout(function(){
          console.log(this);//this 指向window
      }, 200);
  }, false);

这两个的方法是指向window


看了上面的例子,是不是晕了。代码的情况那么多。我怎么知道this指向谁?

记住一句话,这个方法谁调用就指向谁。

为了方便理解:我们可以这么看--用call看

 fun.call(context,p1,p2);//context就是this,谁调用的。p1,p2就是函数参数

举个例子

  function test(){}
  test();

等同于

  function test(){}
  test.call(undefined,p1,p2);

重点来了,this就是undefined。在浏览有个规则就是context如果是null或者undefined,那么就会默认为window。
然后其他的就用这个方法去套,就好了。


最后在说两句

上一篇 下一篇

猜你喜欢

热点阅读