1、全局作用域下的this:

2、一般函数与严格模式下的函数的this:

3、当函数的this作为对象的方法的情况下:

4、对象原型链上的this:

对象P的原型指向o, p.a与p.a创建对象p的属性,当调用p的原型上的方法的时候,this.a与this.b仍然能获取到对象p上的p.a与p.a属性;

需要注意一点,p的原型是o, 也就是说调用p.f()的时候也就是调用对象p原型链o上面的这一个函数属性f ,那么原型链O上面的这一个this仍然可以拿到p.a与p.a属性,也就是说不管这个this是原型链上的还是p对象本身的,当调用的时候,this也是可以指向P这样一个对象。

5、get/set方法下的this:

6、构造器下的this:

例子1:如果正常去调用这个this.a的话,这个this会指向全局对象,在浏览器里面,这个this就会指向window ;但是如果使用new把这个作为构造器去调用的话,那么这个this就会指向这样的一个空的对象,并且这个空对象的原型会指向MyClass.propertype属性 ; 使用new以后,this会指向原型为MyClass.propertype的属性的这样一个空对象 ,那么由于这个this.a=37是做了这样的一个赋值;所以最后的this会作为一个返回值,所以对象O会有这样的o.a的一个属性。
例子2:与例子1不同的是,c2函数里最后返回(return)了一个对象a:38 ;这个时候,打印出o.a的值就不是37了,而是38 ;原因是:当我们使用new在创建这样一个构造器去调用的时候,c2函数里的return语句返回的是一个对象的话,那么会将return的这个对象作为返回值,所以这里的o不再是this而是return里这个对象字面量的值。

7、call/apply方法下的this:

这里定义了一个变量o有两个属性:a:1,b:3 ;然后通过add对象的call()方法,把第一个参数(就是你想作为this的这个对象),后面的5与7就是我们想要去添加的参数,然后这里的5就会赋值给add对象参数里的c,这里的7就会赋值给add对象参数里的d ;最后的一个结果就是1+3+5+7=16 ;call与apply基本没有任何差别,call在传参的方式是点平传递过去的,而apply在传参的时候是作为一个数组去传递的;
注意:用到call与apply的情况有:当我们需要调用object.prototype.toString的时候,想要指定其中的某个this的时候

8、bind方法下的this:(在IE9+才可以使用)

通过bind方法 ; .bind()后面会有一个参数,参数里面的是一个对象,:这个对象就是你想要将某个对象作为this的时候,就把这样的一个对象传进去,那么就形成了一个新的对象,在后面console.log(g())调用的时候; 这个this已经指向这个bind的参数;
下面的var o ,是直接将a赋值为37,f属性直接赋值为f() ;g赋值为bind绑定的这样一个方法,那么输出f的这样一个结果可以拿到37;上面的例子可知,一般函数,我们根据调用方式来判断,o.f()是通过调用属性去调用的,那么this就会指向var o这个对象,也就是拿到了o.a也即是37;但是在使用bind的方法去绑定的时候,即使我们把新绑定的方法作为对象属性去调用,但是仍然只会按之前的bind绑定去做,于是仍然只返回test;

JavaScript的this详解的更多相关文章

  1. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  2. JavaScript严格模式详解

    转载自阮一峰的博客 Javascript 严格模式详解   作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...

  3. [转]javascript console 函数详解 js开发调试的利器

    javascript console 函数详解 js开发调试的利器   分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...

  4. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  5. (" use strict")Javascript 严格模式详解

    Javascript 严格模式详解 转载别人的博客内容,浏览了一遍,没有全部吸收,先保存一下链接 http://www.ruanyifeng.com/blog/2013/01/javascript_s ...

  6. 【HANA系列】SAP HANA XS使用JavaScript数据交互详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...

  7. JavaScript运行机制详解

    JavaScript运行机制详解   var test = function(){ alert("test"); } var test2 = function(){ alert(& ...

  8. [转]JavaScript异步机制详解

    原文: https://www.jianshu.com/p/4ea4ee713ead --------------------------------------------------------- ...

  9. js课程 1-3 Javascript变量类型详解

    js课程 1-3  Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...

  10. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

随机推荐

  1. EF分页问题探讨之 OrderBy

    EntityFramework 应用场景 最近被应用程序中页面加载慢的问题所折磨,看似容易的问题,其实并不容易(已经持续两天时间了),经过“侦查”,发现了两个“嫌疑犯”: EntityFramewor ...

  2. .Net程序员的前端优化

    面向.Net程序员的前端优化 2014-08-06 17:20 by 熬夜的虫子, 1152 阅读, 9 评论, 收藏, 编辑 背景 作为web开发人员大家大多了解一些网站的性能优化方法,其实大部分方 ...

  3. 个推 Spark实践教你绕过开发那些“坑”

    Spark作为一个开源数据处理框架,它在数据计算过程中把中间数据直接缓存到内存里,能大大提高处理速度,特别是复杂的迭代计算.Spark主要包括SparkSQL,SparkStreaming,Spark ...

  4. [转]Android图片下载

    因为国内被墙,看起来不方便,转载下,原文地址:http://android-developers.blogspot.com/2010/07/multithreading-for-performance ...

  5. WCF、Web API、WCF REST、Web Service 区别

    Web Service It is based on SOAP and return data in XML form. It support only HTTP protocol. It is no ...

  6. Julia语言:让高性能科学计算人人可用

    Julia语言:让高性能科学计算人人可用要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有C的快速,Ruby的动态,Python的通用,R般在统计分析上得心应手,Perl的处理字符串处理, ...

  7. HBase 手动 flush 机制梳理

    对应 HBase 版本0.94.1,对照了开源的版本和工作使用的某发行版 问题:在 HBase shell 里面输入 flush 'table_or_region_name'之后,发生了什么?具体的实 ...

  8. 【IOS开发】SimPholders的使用

    推荐一个Xocde开发工具 “SimPholders”,能够快速访问到你的模拟器文件夹,最重要的是完全免费! 官方地址

  9. C语言基础复习总结

    C语言基础复习总结 大一学的C++,不过后来一直没用,大多还给老师了,最近看传智李明杰老师的ios课程的C语言入门部分,用了一周,每晚上看大概两小时左右,效果真是顶一学期的课,也许是因为有开发经验吧, ...

  10. 批量转换cue文件编码

    之前在网上下载的无损(flac.ape),好多都是整盘的,也就是说一个flac或ape文件搭配一个cue分轨文件,这个文件记录着在不同时间段是哪一首歌曲. 由于之前的操作都是在windows下进行的, ...