面向对象--第三弹this

在前面的文章里提到了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();

运行后得到的结果

运行后的结果

得出一个结论:

  • 普通的函数的this指向window
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。
然后其他的就用这个方法去套,就好了。


最后在说两句

  • new constructor()==>this指向生成对象
  • 方法调用{a:1,b:2,c:function(){}}==>指向调用方
  • 函数调用==>指向全局对象
  • apply/call==>指向第一个参数。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. this之谜 在JavaScript中,this是当前执行函数的上下文。因为JavaScript有4种不同的...
    百里少龙阅读 4,613评论 0 3
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 5,274评论 3 12
  • title: js面向对象date: 2017年8月17日 18:58:05updated: 2017年8月27日...
    lu900618阅读 3,627评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,446评论 0 4
  • 未来,你好。 2017,也好。 我是阿依河。。。然后面朝大海春暖花开
    阿依河阅读 1,020评论 0 0