一:全局环境中的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. Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇

    Selenium WebDriver + Grid2 + RSpec之旅(一)             ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...

  2. Codevs 3304 水果姐逛水果街Ⅰ 线段树

    题目: http://codevs.cn/problem/3304/   时间限制: 2 s   空间限制: 256000 KB   题目等级 : 钻石 Diamond 题解       题目描述 D ...

  3. sshd_config 配置文件

    Ssh-server 服务端 sshd_concfig Port Protocol HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_hos ...

  4. hdu 4762 Cut the Cake概率公式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4762 题目大意:一个圆形蛋糕,现在要分成M个相同的扇形,有n个草莓,求n个草莓都在同一个扇形上的概率. ...

  5. [置顶] SVN服务器搭建和使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...

  6. thinkphp 比对过去时间距离现在时间多少的问题

    <?php import('ORG.Util.Date');// 导入日期类 $Date = new Date();//实例化类 $time_diff = $Date->timeDiff( ...

  7. 初步掌握MapReduce的架构及原理

    目录 1.MapReduce定义 2.MapReduce来源 3.MapReduce特点 4.MapReduce实例 5.MapReduce编程模型 6.MapReduce 内部逻辑 7.MapRed ...

  8. [转] react-native 之布局篇

    PS: 苹果使用的宽度单位是为了设计开发者在应用上使用接近的数值.比如宽度范围都在320-414之间.但是宽度对应到像素是有一个转换比例的,对于背景图尤其要准备足够像素的图片.这个足够像素可以通过公式 ...

  9. tomcat work 目录

    用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发布过来,源文件没有发布过来,但这里的jsp没有 ...

  10. iOS进度指示器——NSProgress

    iOS进度指示器——NSProgress 一.引言 在iOS7之前,系统一直没有提供一个完整的框架来描述任务进度相关的功能.这使得在开发中进行耗时任务进度的监听将什么麻烦,在iOS7之后,系统提供了N ...