在Java中,this永远都是‘忠贞’地指向当前类的实例。而在javascript中,this就没有“忠贞”了,this会随着执行环境的变化而变化,也就是说this永远执行执行环境所在的对象。

直接上代码:

代码一:

function test(){alert(this == window)
}
test()

通过运行代码发现结果为true,这是因为test方法的调用时在window环境,所以this指向了window。

接着看:

使用对象字面量定义属性和方法,如下:

var obj = {property : "obj",fun : function(){alert(this == window);alert(this == obj);}
}
obj.fun();

运行下代码,结果为false,true。是什么原因捏?原因其实很简单,就是fun方法是通过obj对象调用的,所以this就指向了obj对象。

有什么问题吗?木有,`(*∩_∩*)′。咱们继续啊!

我们知道在一个方法中还可以返回一个新的方法,形式如下:

 var obj = {property : "obj",fun : function(){return function(){alert(this == obj);alert(this == window);}}
}
obj.fun()() 我们把上面的代码稍稍改编了下,在fun方法中重新返回了一个方法。结果是怎么样?你猜到结果了吗?
正确的结果是false,true。我们来分析下,使用 obj.fun()返回的是一个方法,这时候是在全局环境中(window),所以this就指向了window。明白了吧。                                         到这里你是不是对js中的this有了大概的了解呢,稍等,还有一种情况,就是通过call和apply方法动态改变this的指向。
我们在这里只演示一个call的例子。function test(){alert(this == window) alert(this == obj);
}
var obj = {};
test.call(obj,null);我们继续使用第一个例子。我们定义了一个空对象obj,我们的目的是想把test方法作为obj的一个方法来执行。大家可以执行下看看结果,看看结果是不是和第一个例子的结果不一致
好了,今天暂时介绍到这里,排版暂时有问以后改下,不影响结果。
有问题请留言,谢谢!

转载于:https://blog.51cto.com/hcc0926/1562179

js中的墙头草---this相关推荐

  1. 在js中使用HashMap数据结构,在js中使用K,V数据结构

    首先是定义一个HashMap方法,做基类(复制在js中即可,然后引用) //简单的哈希表,begin function HashMap() {/** Map 大小 * */var size = 0;/ ...

  2. [JavaScript] 探索JS中的函数秘密

    函数长啥样? 把一些要重复使用的内容封装到函数内. function foo(title) {console.log(title) } foo('title') foo('dust') foo('he ...

  3. 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查

    Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...

  4. 在JS中最常看到切最容易迷惑的语法(转)

    发现一篇JS中比较容易迷惑的语法的解释,挺有用的,转载下,与大家分享: js中大括号有四种语义作用 语义1,组织复合语句,这是最常见的 Js代码  if( condition ) { //... }e ...

  5. js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...

    原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...

  6. js中substr,substring,indexOf,lastIndexOf的用法

    js中substr,substring,indexOf,lastIndexOf等的用法 1.substr substr(start,length)表示从start位置开始,截取length长度的字符串 ...

  7. js中的各种宽高以及位置总结

    在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动原理,同时,由于这些属性概念较多,加上浏览器之 ...

  8. WKWebView Safari调试、JS互调、加载进度条、JS中alert、confirm、prompt

    主要内容 Safari调试 swift/OC与JS互调 增加加载进度条 支持JS中alert.confirm.prompt Safari调试 设置 -> safari --> 高级,开启J ...

  9. 彻底理解js中this

    相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...

最新文章

  1. 揭秘高盛区块链报告:区块链技术在五大领域从理论走向实践 | 附报告下载
  2. java 缘起_缘起 网络编程
  3. 数据中台建设中的得与失
  4. WebApi 接口参数不再困惑:传参详解
  5. Istio 首次安全评估结果公布
  6. 二十一、补码 (计算机最小的单位为位)
  7. AI从业人员需要必备这些算法和工具!
  8. 多说评论如何显示最近访客
  9. IEEE Access 期刊投稿
  10. 速达软件|无法打开帐套数据库|一般性网络错误
  11. 本人亲测,实用安装Oracle VM VirtualBox教程
  12. 写完APDL命令流之后,如何运行TXT文件,直接生成k文件
  13. KIS专业版12.0迁移K3WISE14.3后自定义核算项目权限问题
  14. gcd算法以及exgcd
  15. 喜欢的现代诗 -。-
  16. 现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?
  17. Short Pairing-based Non-interactive Zero-Knowledge Arguments
  18. 大数据营销的优势和核心
  19. windows系统nginx重启发生异常
  20. 科学道德与学术诚信 计算机,关于开展2020级研究生科学道德和学术诚信教育工作的通知...

热门文章

  1. 微信小程序云开发 mysql_微信小程序云开发学习笔记(一)云数据库
  2. 电饼锅的样式图片价格_2020年三明治机/电饼铛推荐选购指南,电饼档那个牌子好?有哪些好用的三明治机/早餐机/电饼铛?...
  3. rust矿洞绳子怎么爬下_为何一根绳子可以凭空升到天上?印度通天绳究竟是什么原理?...
  4. java后端开发教程_【后端开发】详细讲解JAVA中方法重载概念——简单易懂
  5. 叉乘点乘混合运算公式_期末复习|人教版二年级上册数学概念和公式总结
  6. oracle用命令方式创建表,oracle创建表的方法和一些常用命令
  7. oracle 容器切换,oracle12c 多租户管理四(容器连接切换)
  8. Linux版rpm与deb格式,如何转换从RPM到DEB和DEB到RPM包使用Alien
  9. java string document_java - String 和 document 的相互转换总结
  10. 2.2 KNN算法实现