关于this

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全面解析 调用位置 在理解 this 的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的...
    后发而先制阅读 445评论 1 0
  • apply、call 有什么作用,什么区别apply()方法可以在设置指定的this值和参数的情况下调用某个函数,...
    嘿菠萝阅读 311评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,854评论 2 17
  • (转载微信上看到的很棒的一篇关于this的写法,分享给大家http://mp.weixin.qq.com/s/ks...
    Hathaway_桉阅读 153评论 0 0
  • 总有朋友问这个问题:最近有点空虚,推荐本好书吧! 对这类要求,我的态度就一个—— 把最近让我投入其中忘了时间的那些...
    爱君如初阅读 438评论 0 2