美文网首页
Javascript关键字this

Javascript关键字this

作者: 百分百空手接白刃_566c | 来源:发表于2018-08-14 18:38 被阅读0次

    this 谁调用就是谁

    var name = 'a';   
    var obj = {   
      name: 'b',   
      getName: function() {   
        console.log(this.name);   
      }  
    };  
    obj.getName(); //b
    var getName = obj.getName;  
    getName();  //a
    var obj2 = (function() {   
      return function() {   
        console.log(this.name);   
      }  
    })();  
    obj2(); //a
    
    

    obj.getName()调用getName的是obj,此时this指向的是obj,所以打印的是b
    而调用getName()的是window,此时this指向的是window.所以打印的是a
    obj2()里面用到了立即执行函数,返回的是一个函数,而调用的也是window,this指向的是window

    var length = 10;
    function fn() {
        console.log(this.length);
    }
    var obj3 = {
      method: function(fn) {
        fn();
        arguments[0]();
      }
    };
    
    obj3.method(fn, 1);//10 2
    

    虽然在程序执行时,使用了obj3.method方法,让this指向了obj3,但是真正的函数执行在函数体内部,也即当fn()执行的时候,this是指向window的,所以第一次执行结果是10
    分析下在method(fn,1)执行时,经历了什么: 首先两个参数fn和1会被放入arguments中,在arguments中第一个参数就是我们传入的函数;接下来fn执行,此时this没有绑定因此指向window,输出10。 然而到了arguments0这一句,相当于把arguments[0]中的第一个参数拿来执行, 效果如下:
    arguments0执行,等同于arguments.0()
    这样我们可以更清楚知道,this是指向arguments实例本身
    复制代码arguments.length就是它本身的长度(arguments是一个类数组,具有length属性),因此输出2

    相关文章

      网友评论

          本文标题:Javascript关键字this

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