JavaScript中this的使用方法总结

在JavaScript中,this的使用分为四种场景,具体请参考阮一峰老师关于this的讲解

第一种情况是纯函数使用

var x =1 ;
function test(){
console.log(this.x)
}
test() //

这里的输出是1,因为在函数中属于全局性的调用,因此this指代window,代表全局对象

第二种情况是作为对象方法调用

function test(){
console.log(this.x)
}
var obj={}//申明一个对象
obj.x = 1;//给对象设置一个属性x并赋值为1
obj.m=test;//给对象设置一个方法test
obj.m();//执行对象方法,输出的是1

以上代码相当于

var obj = {
x : 1,
m : function () {
console.log(this.x)//this指代的是obj这个对象
}
}
obj.m()

从上面代码可以看出,当this作为对象方法调用的时候,this指代的这个上级对象

第三种情况是作为构造函数使用

function test(){ //创建一个构造函数
this.x=1 //构造函数的属性x的值为1
}
var obj = new test();//实例化构造函数生成一个新的对象,这个对象拥有一个属性x,且值为1
console.log(obj.x) //

在上面的代码示例中,this指代的就是obj这个新的对象

第四种情况是apply调用

apply()是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象,将代替function类里面的this对象。因此,这时this指的就是这第一个参数

var x = 0;
function test() {
 console.log(this.x);
} var obj = {};
obj.x = 1;
obj.m = test;
obj.m.apply() //

apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。

如果把最后一行代码修改为

obj.m.apply(obj); //

运行结果就变成了1,证明了这时this代表的是对象obj。

JavaScript中this的使用方法总结的更多相关文章

  1. Jquery中$(document).ready()与传统JavaScript中的window.onload方法的区别(2016/8/3)

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间       ...

  2. JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...

  3. Javascript中alert</script>的方法

    Javascript中alert</script>的方法: <%@ page language="java" import="java.util.*&q ...

  4. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...

  5. URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

    引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. ...

  6. javaScript中的indexOf使用方法

    JavaScript中的indexOf使用方法 概述 indexOf大小写敏感,其中的O要大写 对于字符串而言 indexOf返回字符串第一次出现的位置,若没有出现返回-1 1 var str = & ...

  7. Jquery中$(document).ready() 和 JavaScript中的window.onload方法 比较

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的.   1.执行时间 win ...

  8. Javascript中定时器的使用方法

    Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...

  9. JavaScript 中的变量命名方法

    三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...

随机推荐

  1. spring-boot-starter-data-redis与spring-boot-starter-redis两个包的区别

    spring-boot-starter-data-redis: <?xml version="1.0" encoding="UTF-8"?> < ...

  2. appleid

    https://appleid.apple.com/#!&page=signin

  3. django 简易博客开发 3 静态文件、from 应用与自定义

    首先还是贴一下源代码地址  https://github.com/goodspeedcheng/sblog 上一篇博客我们介绍了 django 如何在views中使用templates以及一些常用的数 ...

  4. 【python】super()

    转自: http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html

  5. 问题解决:FFmpeg视频编解码库,无法解析的外部信号

    在编译FFmpeg相关项目时.可能会出现: error LNK2019: 无法解析的外部符号 "int __cdecl avpicture_fill(struct AVPicture *,u ...

  6. centos mysql错误信息处理

    mysql_secure_installation 提示错误:Enter current password for root (enter for none):ERROR 1045 (28000): ...

  7. B+树在NTFS文件系统中的应用

    B+树在NTFS文件系统中的应用 flyfish 2015-7-6 卷(volume) NTFS的结构首先从卷開始. 卷相应于磁盘上的一个逻辑分区,当你将一个磁盘或者磁盘的一部分格式化成NTFS,卷将 ...

  8. 提升Android编译速度

    Android codebase都非常大.编译一次都须要花非常多时间.假设是preloader/lk/bootimage还好,可是Android的话都是非常久. 实际上这个编译时间还是能够进一步缩短! ...

  9. C++问题记录

    问题idx: 1) 怎么在VS2010下新建一个像VC6.0 中那样的控制台C++程序. cdate: 2014-4-24 A1: VC6.0 对标准C++集的支持不是太好, VS2010也有一些吧, ...

  10. DBscan算法及其Python实现

    DBSCAN简介: 1.简介 DBSCAN 算法是一种基于密度的空间聚类算法.该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值.DBS ...