day1 node in action chapter3
exports 和 module.exports的区别
exports
var module = require('module');
当require一个module后,require函数会返回这个module中exports对象中的内容,然后通过module.xxx便可以使用模块内暴露的内容。
module.exports
Node中不能用任何其他对象、函数或者变量给exports对象赋值,例如在learn_module_exports.js里,直接将Base赋给exports就是错误的。
exports = Base;
这个时候就需要用到module.exports,用于对外提供单个变量、函数或者对象。 ###注意 如果一个module中同时有exports和module.exports,那么将会返回module.exports,而exports将会失效。 那么为什么导出的对象会是module.exports呢? ###原因 在module中,exports对象只是module.exports的一个全局引用,是一个控对象,可以往里面添加属性
var exports = {};
所以exports.add()其实是module.exports.add(),如果这个时候将exports指向其他,就断开了exports和module.exports之间的引用关系,exports就会失效,如果想要再次连接,就写成
module.exports = exports = Base
继承
继承有两种简洁的写法:
var util = require('util');
util.inherits(child,parent);
child.prototype = new parent();
匿名函数解决异步时序混乱问题
var color = 'blue';
setTimeout(() => {
console.log('the color is :' + color);
}, 200);
var color = 'green';
在上面这个代码里,最后输出的颜色是green,因为输出是异步执行的,延迟了200ms,这个时候color已经改变,这样就会导致时序混乱,要解决可以用闭包匿名函数,color变成了函数内部的本地变量,不受外部影响。
var color = 'blue';
(function (color) {
setTimeout(() => {
console.log('the color is :' + color);
}, 200)
})(color);
var color = 'green';
项目地址:https://github.com/KinsomyJS/Node-Journey