Nodejs中的this详解


Posted in NodeJs onMarch 26, 2016

以下内容都是关于在nodejs中的this而非javascript中的this,nodejs中的this和在浏览器中javascript中的this是不一样的。

在全局中的this

console.log(this); {}
this.num = 10;
console.log(this.num); 10
console.log(global.num); undefined

全局中的this默认是一个空对象。并且在全局中this与global对象没有任何的关系,那么全局中的this究竟指向的是谁?在本章节后半部分我们会讲解。

在函数中的this

function fn(){
  this.num = 10;
}
fn();
console.log(this); {}
console.log(this.num); undefined
console.log(global.num); 10

在函数中this指向的是global对象,和全局中的this不是同一个对象,简单来说,你在函数中通过this定义的变量就是相当于给global添加了一个属性,此时与全局中的this已经没有关系了。

如果不相信,看下面这段代码可以证明。

function fn(){
  function fn2(){
    this.age = 18;
  }
  fn2();
  console.log(this); global
  console.log(this.age); 18
  console.log(global.age); 18
}
fn();

对吧,在函数中this指向的是global。

构造函数中的this

function Fn(){
  this.num = 998;
}
var fn = new Fn();
console.log(fn.num); 998
console.log(global.num); undefined

在构造函数中this指向的是它的实例,而不是global。

我们现在可以聊聊关于全局中的this了,说到全局中的this,其实和Nodejs中的作用域有一些关系,如果你想了解Nodejs中关于作用域的信息可以看探讨Nodejs中的作用域问题。这篇文章。

回到正题,全局中的this指向的是module.exports。

this.num = 10;
console.log(module.exports); {num:10}
console.log(module.exports.num);

  为什么在全局中this会指向module.exports,那就需要先了解更多关于module.exports的相关知识了,暂时我们先了解到这里,后面有机会我们会聊到module

NodeJs 相关文章推荐
nodejs开发环境配置与使用
Nov 17 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 #NodeJs
Nodejs如何复制文件
Mar 09 #NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 #NodeJs
nodejs 中模拟实现 emmiter 自定义事件
Feb 22 #NodeJs
nodejs修复ipa处理过的png图片
Feb 17 #NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 #NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 #NodeJs
You might like
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
PHP中extract()函数的定义和用法
2012/08/17 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
大学生专科毕业生自我评价
2013/11/17 职场文书
《老王》教学反思
2014/02/23 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
驻村工作先进事迹
2014/08/14 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
护理实习生带教计划
2015/01/16 职场文书
努力工作保证书
2015/02/28 职场文书
公司车辆管理制度
2015/08/04 职场文书
《去年的树》教学反思
2016/02/18 职场文书