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的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs事件的监听与触发的理解分析
Feb 12 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
深入浅析Nodejs的Http模块
Jun 20 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 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中mysql连接方式PDO使用详解
2015/02/25 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
element上传组件循环引用及简单时间倒计时的实现
2018/10/01 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
在vue中使用jsonp进行跨域请求接口操作
2020/10/29 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
Python yield 小结和实例
2014/04/25 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
华为慧通面试题
2012/09/11 面试题
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
乡村文明行动实施方案
2014/03/29 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
少年雷锋观后感
2015/06/10 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript