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 相关文章推荐
14款NodeJS Web框架推荐
Jul 11 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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 in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
php session劫持和防范的方法
2013/11/12 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
python多线程之事件Event的使用详解
2018/04/27 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
Python计算IV值的示例讲解
2020/02/28 Python
pandas分组聚合详解
2020/04/10 Python
keras.layer.input()用法说明
2020/06/16 Python
《雷雨》教学反思
2014/02/20 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
高校教师个人总结
2015/02/10 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
一文搞懂MySQL索引页结构
2022/02/28 MySQL