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框架中处理404页面一个方式
May 28 NodeJs
Nodejs进程管理模块forever详解
Jun 01 NodeJs
nodejs之请求路由概述
Jul 05 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
Nodejs--post的公式详解
Apr 29 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 07 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
图解NodeJS实现登录注册功能
Sep 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
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
react-router中的属性详解
2017/06/01 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python机器人行走步数问题的解决
2018/01/29 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python实现zabbix发送短信脚本
2018/09/17 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
学生拾金不昧表扬信
2014/01/21 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
党员一句话承诺大全
2014/03/28 职场文书
运动会演讲稿200字
2014/08/25 职场文书
小学大队长竞选稿
2015/11/20 职场文书