一:全局环境中的this指的是window对象

二:作为对象的方法调用

当函数作为对象的方法被调用时,this指向该对象

例子:

三:作为普通方法调用

当函数不作为对象的属性被调用,而是作为普通函数函数被调用,this指向全局对象,也就是window

例子1:

此时this是指向window对象。

如上图运行结果可以看出,在函数内部定义变量,未使用var 声明,则指向全局变量。可以对比结果

  

例子2:

如上图所示,作为普通函数调用时,this指向window 。作为对象属性调用时,this指向该对象。this是在对象内部函数定义的,但是调用的时候是作为普通函数调用,多以this依然指向window。

this的指向,是根据调用时的环境,而非定义时的环境。

以前看闭包的资料时,看到思考题,当时还似懂非懂,出处http://www.jb51.net/article/24101.htm

六、思考题

如果你能理解下面代码的运行结果,应该就算理解闭包的运行机制了。

Js代码 
  var name = "The Window";   
  var object = {   
    name : "My Object",   
    getNameFunc : function(){   
      return function(){   
        return this.name;   
     };   
    }   
};   
alert(object.getNameFunc()());  //The Window

这个思考题的执行结果,如图所示:

第一步 object.getNameFunc() 结果是一个匿名函数,object.getNameFunc()()第二个括号调用匿名函数,并执行。此时是作为普通函数被调用的,所以this是指向全局变量,所以name输出为The window 。这里的结果应该是跟this有关系,但是现在还是不太清楚,作者把这道题目写在闭包的这个位置的意图,得再研究研究。

如果需要访问My object 就把this保存起来,如下图

四:改变this指向,关于call()和apply();

跟普通函数的调用相比,用call()或者apply()可以改变传入的this;

c

参考资料:《JavaScript设计模式与开发实践》 曾探

未完待续

18:00:54

随机推荐

  1. MySQL安装没有弹出配置向导

    安装MySQL过程中一切都正常只是没有弹出MySQL配置向导对话框,即出现"launch the MySQL Instance Configuration Wizard" fini ...

  2. Linux学习笔记19——信号2

    上一节中讲到了sigprocmask函数,它的作用是检查或修改它的进程信号掩码,这一节我们主要学习捕捉与忽略信号的函数sigaction和等待信号函数. 一  sigaction函数的作用 定义在接收 ...

  3. DirectDraw

    一.DirectDraw接口 DirectDraw接口图如下: 1.IUnknown:所有COM对象都必须从这个基本接口派生 2.IDirectDraw:这是开始使用DirectDraw时必须创建的主 ...

  4. 实现自己的脚本语言ngscript之一:词法分析

    正则表达式的理论基础可以参考装配脑袋的 这个 自己动手开发编译器(二)正则语言和正则表达式 这个 自己动手开发编译器(三)有穷自动机 还有这个 自己动手开发编译器(四)利用DFA转换表建立扫描器 如果 ...

  5. lightoj1057 - Collecting Gold (tsp问题)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1057 题目大意:在二维矩阵中,给你一个起点和至多15个的目标点.要你求出从起点出发经过 ...

  6. Google协作平台

    本博文的主要内容有 .Google协作平台的介绍 1.Google协作平台的介绍 https://zh.wikipedia.org/wiki/Google%E5%8D%8F%E4%BD%9C%E5%B ...

  7. 广州Uber优步司机奖励政策(1月18日~1月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. God of War - HDU 2809(状态压缩+模拟)

    题目大意:貌似是一个游戏,首先给出卢布的攻击,防御,还有血量,再给出每升一级增加的攻击防御还有血量,然后又N个敌人,杀死每个敌人都会得到一些经验,求杀死完所有敌人时剩余的最大血量. 分析:因为敌人比较 ...

  9. 如何选择NoSql数据库

    How to choose a No Sql database 介绍了一下怎么选择一个No Sql数据库,下面简单翻译一下重点. No Sql的数据库可以分为如下4类: Key-Value数据库 数据 ...

  10. EnterpriseArchitectect 软件的勾选的几个选项对应的中文意思

    Business Process 业务流程 Requirements 需求分析 Use Case 用例 Domain Model 领域模型 Class 类 Database 数据库设计 Compone ...