美文网首页
关于this

关于this

作者: 羞涩的涩 | 来源:发表于2016-08-01 19:31 被阅读20次

    this作为全局对象window的几种情况

    1. 作为函数调用的this
    2. 作为内部嵌套函数的this
    3. 在setTimeout、setInteval中this仍然是全局变量window

    this为非全局变量的几种情况

    1. 构造函数(构造函数就是通过函数生成一个新的对象,这时this指的为这个新对象)

    2. 做为对象方法调用,如:

      var obj1 = {
          name: 'Byron',
          fn : function(){
              console.log(this);
          }
      };
      
      obj1.fn(); // obj1
      
      var fn2 = obj1.fn;
      
      fn2();  //此时this仍然指的是全局对象window
      
    3. DOM对象绑定事件this代表源DOM对象(低版本IE下有bug,也指向window)

    4. 使用bind函数,绑定原函数,此时this指的是传入bind的第一个参数。如:

      var obj1 = {
          name: 'Byron',
          fn : function(){
              console.log(this);
          }
      };
      
      obj1.fn(); //obj1
      
      var fn2 = obj1.fn;
      
      fn2();  //此时this仍然指的是全局对象window
      
      var fn3 = obj1.fn.bind(obj1);
      fn3();  //此时this指的为obj1(此方法比较灵活,可利用此方法将所要传送给this 的参数指定为bind的第一个对象)
      
    5. apply和call设置this,如:

      fn.call(context,num1,num2...);
      fn.apply(context,numArray)
      

    第一个参数为this对象,不同点是call接受参数列表,apply接受参数数组。

    1. caller,如果一个函数f是在全局作用域内被调用的,则f.caller为null,相反,如果一个函数是在另外一个函数作用域内被调用的,则f.caller指向调用它的那个函数.可以简单的理解为caller指的是他的父函数。如:

      function fn(){
          console.log(fn.caller); 
          function fn2(){
              console.log(fn2.caller)
          }
          fn2()
      }
      
      fn();
      
    2. callee,当函数被调用的时候arguments.callee(匿名函数的时候很好用,可以调用自身)

      var i = 1;
      window.onclick = function(){
          console.log(1);
          if(i<5){
              i++;
              setTimeout(arguments.callee,200);
          }
      }
      
      

    • 本博客版权归羞涩的涩和饥人谷所有,转载请注明出处

    相关文章

      网友评论

          本文标题:关于this

          本文链接:https://www.haomeiwen.com/subject/tjffsttx.html