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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 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
详解PHP素材图片上传、下载功能
2019/04/12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python Pandas 箱线图的实现
2019/07/23 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
python解释器pycharm安装及环境变量配置教程图文详解
2020/02/26 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
C语言开发工程师测试题
2016/12/20 面试题
运动会开幕式邀请函
2014/01/22 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
雾霾停课通知
2015/04/24 职场文书
对学校的意见和建议
2015/06/04 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers