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教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
nodejs 实现模拟form表单上传文件
Jul 14 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 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 session应用实例 登录验证
2009/03/16 PHP
php实现文件下载代码分享
2014/08/19 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
列举Python中吸引人的一些特性
2015/04/09 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python切片操作实例分析
2018/03/16 Python
python3中函数参数的四种简单用法
2018/07/09 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
几款好用的python工具库(小结)
2020/10/20 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
中医药大学毕业生自荐信
2013/11/08 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
总经理人事任命书
2014/06/05 职场文书
琅琊山导游词
2015/02/05 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js