zoukankan      html  css  js  c++  java
  • JavaScript中this的指向问题

    在《JavaScript高级程序设计》一书中说道“this是函数在执行时所处的作用域”,这句话有些问题,与实际事实不符,看下面的例子:

       1:  var greeting = 'Hello from global scope!';
       2:   
       3:  function e() {
       4:     alert(greeting);
       5:     alert(this.greeting);
       6:  }
       7:   
       8:  var tom = {
       9:      greeting:'Hello from Tom!'
      10:   };
      11:   
      12:  tom.f = e;
      13:  tom.f(); //执行结果依次是'Hello from global scope!', 'Hello from tom' 

    这个例子中的this指向的是什么?显然是tom。那么f(即e)执行时所处的作用域是什么?显然是全局作用域。假如f执行时所处的作用域如作者所说为this所指对象的话,那就意味着在本例中f执行时所处的作用域为tom,也就是说在f执行过程中,与其作用域链相对应的那个变量对象链的最前端那个对象是tom,而这就意味着在此时函数体内对名称greeting进行解析时首先遇到的是tom中定义的greeting,于是两条输出语句的结果都应该是“Hello from Tom!”,这不符合事实,所以按作者的说法所做的那个假设是错误的。

    JavaScript中的this的指向:

    1. 函数作为哪个对象的方法调用,函数体内的this(不包括嵌套定义在其中的函数中的this)指向的就是那个对象。
    2. 结合new运算符调用一个构造函数时,系统会先自动生成一个对象,然后在该对象上调用构造函数。此时在构造函数体内,this指向的就是这个对象。
    3. 直接调用一个函数,相当于把它当作全局对象的方法调用。
    4. JavaScript中没有类作用域的概念,因此方法内部要访问据以调用此方法的那个对象的属性,必须使用this关键字,按“this.属性名”的语法来访问。
  • 相关阅读:
    可执行程序的装载
    stdafx.h的作用
    AI调色板
    3ds max输出图片
    3ds max移除几何体的线段
    3ds max删除了对象后,还是将原来所有对象输出的原因
    vs win32 & MFC 指针默认位置
    3ds max 分离对象
    PDF
    endnote设置文献第二行悬挂缩进办法
  • 原文地址:https://www.cnblogs.com/Mainz/p/2119459.html
Copyright © 2011-2022 走看看