1.循环问题

当循环调用 require() 时,一个模块可能在未完成执行时被返回。
例如以下情况:
a.js:

exports.done = false;
const b = require('./b.js');
console.log('在 a 中,b.done = %j', b.done);
exports.done = true;
console.log('a 结束');

b.js:

console.log('b 开始');
exports.done = false;
const a = require('./a.js');
console.log('在 b 中,a.done = %j', a.done);
exports.done = true;
console.log('b 结束');

main.js:

console.log('main 开始');
const a = require('./a.js');
const b = require('./b.js');
console.log('在 main 中,a.done=%j,b.done=%j', a.done, b.done);

当 main.js 加载 a.js 时,a.js 又加载 b.js。 此时,b.js 会尝试去加载 a.js。 为了防止无限的循环,会返回一个 a.js 的 exports 对象的 未完成的副本 给 b.js 模块。 然后 b.js 完成加载,并将 exports 对象提供给 a.js 模块。
当 main.js 加载这两个模块时,它们都已经完成加载。 因此,该程序的输出会是:
$ node main.js

main 开始
a 开始
b 开始
在 b 中,a.done = false
b 结束
在 a 中,b.done = true
a 结束
在 main 中,a.done=true,b.done=true

需要仔细的规划, 以允许循环模块依赖在应用程序内正常工作.

2.原型继承问题

需要注意的是call、apply、bind方法都只能继承对象的方法,却不能对它们的原型进行拷贝或继承,为此我们一般使用混合的写法,使用原型链和(apply或者call)方法进行继承。
而在nodeJS中,util包提供了一个方法util.inherits(constructor, superConstructor)
所以就得如下,通过结合使用call和inherits才能将其完全拷贝:

function Girl(name){this.name = name;EventEmitter.call(this);
}
util.inherits(Girl,EventEmitter);var girl = new Girl();

注意,不建议使用 util.inherits()。 请使用 ES6 的 class 和 extends 关键词获得语言层面的继承支持。 注意,这两种方式是语义上不兼容的。

constructor <Function>
superConstructor <Function>
从一个构造函数中继承原型方法到另一个。 constructor 的原型会被设置到一个从 superConstructor 创建的新对象上。


superConstructor 可通过 constructor.super_ 属性访问。

const util = require('util');
const EventEmitter = require('events');function MyStream() {EventEmitter.call(this);
}util.inherits(MyStream, EventEmitter);MyStream.prototype.write = function(data) {this.emit('data', data);
};const stream = new MyStream();console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // truestream.on('data', (data) => {console.log(`接收的数据:"${data}"`);
});
stream.write('运作良好!'); // 接收的数据:"运作良好!"

例子:使用 ES6 的 class 和 extends:

const EventEmitter = require('events');class MyStream extends EventEmitter {write(data) {this.emit('data', data);}
}const stream = new MyStream();stream.on('data', (data) => {console.log(`接收的数据:"${data}"`);
});
stream.write('使用 ES6');

【渗透】node.js经典问题相关推荐

  1. 2019 某某最新《 Javascript之Node.JS经典教程 Node.js从理论到实战》

    适用人群  前端开发,前端工作,前端学习  课程概述  智能社:Javascript之Node.JS-经典教程:从理论到实战!  基础部分(第1-6节)  模块化(第7-8节)  框架应用(第9-24 ...

  2. 【技术学习】一次Node.js站点渗透

    前言 遇到一个站,后端是Node.js写的,对于这种类型的站点,一般比较难getshell,但也实现了最终的目标,拿到后台权限 信息搜集 先进行常规的信息搜集,子域名扫描.端口扫描.目录扫描等 这个站 ...

  3. Node.js入门经典 读书笔记(3)

    本章中我们将讲述Node.js的作用 1.设计Node.js的目的 Node.js是构建在Chrome的JavaScript运行时之上的一个平台,用于简单构建快速的.可扩展的网络应用程序.Node.j ...

  4. js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品

    凭借着高并发性能优秀.异步事件驱动.入门简单等优势,Node.js 受到了不少开发者们的青睐.但不得不承认的是,如果用不好 Node.js,它的坑就会非常多,为了帮助各位 Node.js 的开发者们更 ...

  5. node/js 漏洞_6个可用于检查Node.js中漏洞的工具

    node/js 漏洞 Vulnerabilities can exist in all products. The larger your software grows, the greater th ...

  6. 图灵访谈系列之九:CNode社区谈Node.js技术及生态

    Node.js在各种技术会议上的分享越来越火热,为了让更多的人了解Node.js以及Node.js中文技术社区CNode,12月10日在易宝支付举行第三期Node.js北京分享会--NodeParty ...

  7. [转]为什么我要用 Node.js? 案例逐一介绍

    原文地址:http://blog.jobbole.com/53736/ 介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样, ...

  8. 如何创建高性能、可扩展的Node.js应用?

    作者|Virgafox 译者|姚佳灵 出处丨前端之巅 说明:本文根据原文作者的系列文章编辑而成,略有删改. 在这篇文章中,我们将介绍关于开发 Node.js web 应用程序的一些最佳实践,重点关注效 ...

  9. 2019 年,19 种方法让自己成为更好的 Node.js 工程师

    原文作者:Yoni Goldberg 译者:UC 国际研发 Jothy 写在最前:欢迎你来到"UC国际技术"公众号,我们将为大家提供与客户端.服务端.算法.测试.数据.前端等相关的 ...

最新文章

  1. kafka的安装与启动运行
  2. 同软件多个线程设置不同ip_5-13网络编程(附带多线程死锁,线程通信)
  3. linux shell 字符串 文件内容 大小写 转换 替换
  4. 配对MPLS和SD-WAN是一个双赢的方案
  5. c语言画图 钟表模拟程序,图形模拟时钟C语言课程设计
  6. PMCAFF“音乐+社交”产品马拉松大赛圆满结束,10支队伍大放异彩
  7. JZOJ 1220. Pla
  8. Android Gson的使用总结
  9. System.InvalidOperationException : 不应有 Response xmlns=''。
  10. selenium autoit java_selenium借助AutoIt识别上传文件Java篇
  11. php 复杂数组排序,如何利用php array_multisort函数 对数据库结果进行复杂排序
  12. 威学一百_涨价通知丨威学一百VIP全年畅学卡价格即将上调!
  13. 万兆网、10G ethernet subsystem IP核
  14. 将数据库中的表结构导出到excel中(写数据库设计说明书)
  15. 一步到位:手把手教你R语言竞争风险模型建模-列线图-校准曲线-K折验证-外部验证- 决策曲线
  16. win10熄屏时间不对_Win10系统何如设置自动锁屏时间,教程来啦,windows10怎样设置熄屏时间...
  17. 2022-2028年中国抽水蓄能电站设备制造行业市场竞争态势及发展趋向分析报告
  18. 计算机网络简单理解总结
  19. MATLAB 求解积分上、下限含有未知数的方程
  20. 电脑电池出场容量与目前最大容量查询查询

热门文章

  1. windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例
  2. 【经验】提高github的下载(克隆)速度
  3. 【linux】NXP MFGTools工具配置文件详解
  4. 用c语言循环语句,C语言中循环语句有哪些具体怎么用
  5. 底部居中_4月9日小米9 SE布朗熊发布;小米新专利前置摄像挪屏幕底部
  6. 查看器_三款完美替代Windows10自带照片查看器的神器!
  7. android读取xml 字符串,Android 读取本地Xml文件,并转换成String
  8. Java项目:校园二手市场系统(java+SSM+mysql+maven+tomcat)
  9. java interface list_你了解注解内的@interface List么
  10. 【matlab】我要自学网笔记总结 1.3