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 的 c++ module 链接到 OpenSSL
Aug 03 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
windows下安装nodejs及框架express
Aug 07 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs mysql 实现分页的方法
Jun 06 NodeJs
nodejs调取微信收货地址的方法
Dec 20 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
JavaScript的Function详细
2006/11/14 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
ionic3 懒加载
2017/08/16 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
react中的ajax封装实例详解
2017/10/17 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
Python实现学校管理系统
2018/01/11 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
Python实现代码块儿折叠
2020/04/15 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
单位刻章介绍信范文
2014/01/11 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
指导教师评语
2014/04/26 职场文书
科学发展观演讲稿
2014/09/11 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
初婚未育证明样本
2015/06/18 职场文书
公司人事管理制度
2015/08/05 职场文书
Linux中文件的基本属性介绍
2022/06/01 Servers