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中exports与module.exports的区别详细介绍
Jan 14 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
nodejs下打包模块archiver详解
Dec 03 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 22 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不用正则采集速度探究总结
2008/03/24 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
使用Apache的rewrite
2021/03/09 Servers
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
应用化学专业本科生求职信
2013/09/29 职场文书
人事助理岗位职责
2013/11/18 职场文书
三好学生个人总结
2015/02/15 职场文书
人口与计划生育责任书
2015/05/09 职场文书
无房证明样本
2015/06/17 职场文书
暑假生活随笔
2015/08/15 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL