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 相关文章推荐
golang、python、php、c++、c、java、Nodejs性能对比
Mar 12 NodeJs
Nodejs初级阶段之express
Nov 23 NodeJs
nodeJs爬虫获取数据简单实现代码
Mar 29 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 NodeJs
Nodejs搭建wss服务器教程
May 24 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
python实现在字符串中查找子字符串的方法
2015/07/11 Python
python版本的读写锁操作方法
2016/04/25 Python
python实现比较文件内容异同
2018/06/22 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
django框架auth模块用法实例详解
2019/12/10 Python
详解Python中的分支和循环结构
2020/02/11 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
物流专业毕业生推荐信范文
2013/11/18 职场文书
护理专业求职信
2014/06/15 职场文书
写给父母的感谢信
2015/01/22 职场文书
2016公司年会主持词
2015/07/01 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
详解Python中的进程和线程
2021/06/23 Python