zoukankan      html  css  js  c++  java
  • js——this关键字

    当一个函数并非一个对象的成员时、那么它被当做一个函数来调用、此时this被绑定到全局对象、如:

    //创建myObject
    var myObject = { 
      value : 0,
      Tempfunc: function(){
        var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已
          alert(this); //全局作用域
        }; 
        return function(){    //注意:这个匿名函数不是对象的直接成员
          alert(this.value);
        }
      }
    }; 
    myObject.Tempfunc()(); //undefined

    这就是刚才所说的 如果包含this的最近的函数不是某个对象的成员,那么this的值便设为全局对象,
    反过来如果包含this的函数(无论什么时候,javascript都会把this放到function内部)最近的函数是某个对象的成员时、那么this的值就是那个对象

    如果内部函数想访问对象的属性有一个很容易解决的方案:如果该方法定义一个变量并且赋值为this,那么内部函数就可以通过那么变量访问到this,如下:

    //创建myObject
    var myObject = { 
      value : 0,
      Tempfunc: function(){
        var that = this;
        var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已
          alert(this); //全局作用域
        }; 
        return function(){    //注意:这个匿名函数不是对象的直接成员
          alert(that.value);
        }
      }
    }; 
    myObject.Tempfunc()();    //0

    再来回顾一个简单的闭包例子:

    var name = "Global name";
    function funcA(){
      var name = "FuncA name";
      return function(){
        alert(this.name);
      };
    }
    funcA()(); //Global name

    其实this和作用域没有什么关系、

  • 相关阅读:
    PAT1007
    PAT1005
    PAT1002
    PAT1003
    PAT1016
    PAT 1018
    PAT1009
    pat 1037
    解决Git合并分支发生的冲突
    站和队列的基本使用
  • 原文地址:https://www.cnblogs.com/toxiaonan/p/2535405.html
Copyright © 2011-2022 走看看