zoukankan      html  css  js  c++  java
  • this的指向

    1.this指向它的调用对象

    function getA(){
      var a = 1;
      console.log(this); //window
      console.log(this.a); //undefined
    }
    getA();  //等价于window.getA()
     
    var getA={
      a:"1",
      fn:function(){
        console.log(this.a) //1
      }
    }
    getA.fn();  //此时this指向对向getA
     
    var getA={
      a:1,
      fn:function(){
        console.log(this.a) //1
      }
    }
    window.getA.fn(); //此时this仍然指向getA(),this只会指向他的上一级
     
    var getA={
      a:1,
      b:{
        a:5,
        fn:function(){
          console.log(this.a); //5
        }
      }
    }
    getA.b.fn();
     
    var getA={
      a:1,
      b:{
        a:5,
        fn:function(){
          console.log(this.a); //undefined
        }
      }
    }
    var c = getA.b.fn;
    c(); //fn赋值给变量C时没有执行,所以最终指向是window
     
    2.new会改变this的指向
     
    function getA(){
      this.a = 1;
    }
    var b = new getA();
    console.log(b.a);  //1,new等于将getA()复制了一份到对象B中
     
    function getA(){
      this.a = 1;
      return{};
    }
    var b = new getA();
    console.log(b.a); //undefiend
     
    function getA(){
      this.a = 1;
      return function(){};
    }
    var b = new getA();
    console.log(b.a); //undefiend
     
    function getA(){
      this.a = 1;
      return 1;
    }
    var b = new getA();
    console.log(b.a); //1
     
    function getA(){
      this.a = 1;
      return undefined;
    }
    var b = new getA();
    console.log(b.a); //1
     
    function getA(){
      this.a = 1;
      return null;
    }
    var b = new getA();
    console.log(b.a); //1
     
    3.call,apply会改变this指向
     
    var getA={
      a:1,
      fn:function(){
        console.log(this.a);  
      }
    }
    var b = getA.fn;
    b.call(getA);
     
    call可以添加多个参数
    var getA={
      a:1,
      fn:function(c,d){
        console.log(this.a); //1
        console.log(c+d); //7
      }
    }
    var b = getA.fn;
    b.call(getA,3,4);
     
    apply与call类似,但是apply的第二个参数必须是数组
    var getA={
      a:1,
      fn:function(){
        console.log(this.a); //1
      }
    }
    var b = getA.fn;
    b.apply(getA);
     
    var getA={
      a:1,
      fn:function(c,d){
        console.log(this.a); //1
        console.log(c+d); //7
      }
    }
    var b = getA.fn;
    b.call(getA,[3,4]);
     
    如果call和apply的第一个参数写的是null,则指向window
  • 相关阅读:
    [Swift]LeetCode954. 二倍数对数组 | Array of Doubled Pairs
    [Xcode 实际操作]九、实用进阶-(18)图像人脸识别:对图片中的人像进行面部检测
    Hibernate or JPA Annotation中BLOB、CLOB注解写法
    install_driver(mysql) failed
    【Android】Android中AlertDialog对话框的使用实例
    POJ 2442 Sequence【堆】
    distributed OSGI demo
    DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
    提取工厂类
    【JAVA学习】struts2的action中使用session的方法
  • 原文地址:https://www.cnblogs.com/wha000/p/11357312.html
Copyright © 2011-2022 走看看