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之请求路由概述
Jul 05 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
Feb 13 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 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中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php表单提交问题的解决方法
2011/04/12 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
javascript json2 使用方法
2010/03/16 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
jQuery示例收集
2010/11/05 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
详解python的变量缓存机制
2021/01/24 Python
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
巴西购物网站:Submarino
2020/01/19 全球购物
你常见到的runtime exception
2016/09/05 面试题
C#笔试题
2015/07/14 面试题
大学生四年生活自我鉴定
2013/11/21 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
2015年底工作总结范文
2015/05/15 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
浅谈JS的二进制家族
2021/05/09 Javascript
Golang中channel的原理解读(推荐)
2021/10/16 Golang
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
React更新渲染原理深入分析
2022/12/24 Javascript