一:全局环境中的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. 关于Unity的ViewSpace(CameraSpace)的坐标系

    从昨天开始遇到一个看似很小,但令我苦恼的问题,由于对Unity的坐标系没有直接搞清楚,所以导致一个shader没看懂,于是发了个贴:http://game.ceeger.com/forum/read. ...

  2. 宁波Uber优步司机奖励政策(1月18日~1月24日)

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

  3. Redis教程03——Redis 发布/订阅(Pub/Sub)

    Pub/Sub 订阅,取消订阅和发布实现了发布/订阅消息范式(引自wikipedia),发送者(发布者)不是计划发送消息给特定的接收者(订阅者).而是发布的消息分到不同的频道,不需要知道什么样的订阅者 ...

  4. 趣解curl

    Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧! $ curl http://www.linuxidc.com 回车之后,www.linuxid ...

  5. 一步一步写算法(之 A*算法)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在前面的博客其中,事实上我们已经讨论过寻路的算法.只是,当时的演示样例图中,可选的路径是唯一的 ...

  6. 数学之路-python计算实战(20)-机器视觉-拉普拉斯算子卷积滤波

    拉普拉斯算子进行二维卷积计算,线性锐化滤波 # -*- coding: utf-8 -*- #线性锐化滤波-拉普拉斯算子进行二维卷积计算 #code:myhaspl@myhaspl.com impor ...

  7. QDomDocument类

    QDomDocument类代表了一个XML文件 QDomDocument类代表整个的XML文件.概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法. 由于元素.文本节点.注释.指令执行等等不 ...

  8. Spring AOP + AspectJ Annotation Example---reference

    In this tutorial, we show you how to integrate AspectJ annotation with Spring AOP framework. In simp ...

  9. 9.30 noip模拟试题

    时限均为1s,内存 256MB 1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY. ...

  10. iOS Safari 中点击事件失效的解决办法

    问题描述 当使用委托给一个元素添加click事件时,如果事件是委托到 document 或 body 上,并且委托的元素是默认不可点击的(如 div, span 等),此时 click 事件会失效. ...