Node中的JavaScript
2018-01-10 本文已影响6人
好吃的野菜
global 对象
- 在浏览器中,全局对象指的是window对象,在window对象上定义的任何内容都可以被全局访问到;
- 在Node中,有两个类似但却各自代表不同含义的对象;
global 对象:和window一样,任何global对象上的属性都可以被全局访问到;
process对象:所有全局执行上下文中的内容都在process对象中。
模块系统
- 在浏览器中,直接通过script标签引入第三方库,会导致对全局命名空间的污染和命名冲突问题;
- 在Node中,通过require、export、module三个关键字引入了模块系统;
- 在Node中,通过require关键字加载模块,加载模块查找顺序:核心模块>按路径加载模块>node_modules向上递归;
- require关键字按路径加载模块时允许加载模块文件不带后缀名,会依次查找.js、.json、.node为后缀名的文件;
- export = module.export = {} 意思是export关键字是对module.export的引用,默认情况下是一个对象,但可以对其进行重写,将类的构造器函数暴露出来:
# person.js
module.export = Person;
function Person(name) {
this.name = name;
}
Person.prototype.talk = function() {
console.log(‘我的名字是’ + this.name);
}
# index.js
var Person = require(‘./person’);
var john = new Person(‘john’);
john.talk();
这样,在index文件中,不再导入的是对象,而是一个函数!
事件
- Node.js最重要的概念之一就是事件驱动,最基础的API是EventEmitter;
- EventEmitter API定义了on、emit、once以及removeListener方法,以process.EventEmitter形式暴露出来;
# index.js
var EventEmitter = require(‘event’).EventEmitter;
var a = new EventEmitter();
a.on(‘event’, function() {
console.log(‘event called’);
});
a.emit(‘event’);
buffer
- Node.js中增加了对二进制数据的处理,buffer是一个表示固定内存分配的全局对象,可以方便的对数据进行编码转换。