node基础
来源:互联网 发布:c语言char什么意思 编辑:程序博客网 时间:2024/06/09 21:37
一.什么是模块:
在node中,文件和模块是一一对应的,也就是说一个文件就是一个模块;
每个模块都有自己的作用域;
我们通过var声明的变量并非全局而是该模块作用域下的。
var a = 100;global.a=200;console.log(a);//100console.log(global.a)//200
二.加载机制
路径问题:现在1.js和2.js都在F:/mynode路径下,1.js想要加载2.js
绝对路径:require('F:/mynode/2.js');必须加上单引号。
相对路径:require('./2.js');尽管在同一个文件夹下,也要加上./
如果写成 require('2.js');就会加载node中的核心模块或者node_modules。
查找问题:
如果写成require('./2');
1.首先按照加载的模块的文件名称进行查找,例如:
现在1.js、2.js和2文件都在F:/mynode路径下,require('./2');会加载2,不会加载2.js文件
2.如果没有找到,则会在模块文件名称后加上.js的后缀进行查找,例如:
现在1.js和2.js都在F:/mynode路径下,require('./2');会先找文件名称为2的文件,没有找到,
在文件名称后面加上后缀.js,就会加载2.js文件
3.如果没有找到,则会在模块文件名称后加上.json的后缀进行查找
4.如果没有找到,则会在模块文件名称后加上.node的后缀进行查找
三.模块module和exports
在一个模块中通过var定义的变量,其作用域范围是当前模块,外部不能够直接访问
如果我们想一个模块访问另一个模块中定义的变量,可以:
1.把变量作为global对象的一个属性,但是这样的做法是不推荐的
2.使用模块对象module(保存提供和当前模块有关的一些信息)
Module {
id: '.',
exports: {},
parent: null,
filename: 'F:\\mynode\\1.js',
loaded: false,
children: [],
paths: [ 'F:\\mynode\\node_modules', 'F:\\node_modules' ] }
1.js文件
require('./2.js');//返回加载模块的module.exports
var m5 = require('./2.js');//返回加载模块的module.exportsconsole.log(m5.a);2.js文件
var a = 100;module.exports.a = a;在模块作用域内,还有一个内置的模块对象,exports,他其实就是module.exports
console.log(module.exports === exports);//true
因此2.js文件可以这样写:
var a = 100;exports.a = a;注意:
在使用module.exports和exports不要修改他们的指向,只是通过添加属性来操作,否则会切断两者之间的联系。
当向外暴露一个类(构造函数)时,module.export = 构造函数名;
People.js
function People(name,sex,age){this.name = name;this.sex = sex;this.age = age;}People.prototype = {sayHello : function(){console.log(this.name +' is ' + this.age);}};module.exports = People;a.js
var People = require('./People.js');var Jack = new People('Jack','male','18');Jack.sayHello();People.js和a.js在同一路径下,当执行node a.js命令时,输出结果:Jack is 18
如果通过exports.People = People;这种方式向外暴露构造函数People,则a.js要写成下列方式:
var Jack = new People.People('Jack','male','18');这是不推荐的,规定不能这样写。
var People = require('./People.js');var Jack = new People.People('Jack','male','18');Jack.sayHello();总之,向外暴露类(构造函数)时,使用module.export = 构造函数名;
再说一下this的问题:
function People(){}People.sex = 'male';People.foo = function(name,sex){this.name = name;this.sex = sex;console.log(this.sex);}var Lucy = new People.foo('Lucy','female');//femaleconsole.log(People.sex);//maleconsole.log(Lucy.sex);//female当执行new操作符时,改变了this指向,指向Lucy对象
- node笔记---node基础
- node基础
- node基础
- node.js基础语法
- node测试基础
- node测试基础
- 20150815 Node.js基础
- node安装和基础
- Node.js基础学习
- Node.js#0基础
- Node.js 基础命令
- Node.js基础1
- node网络编程基础
- node.js基础学习
- node.js基础入门
- Node.js基础学习
- node.js基础
- Node.js基础学习
- JavaScript 笔记
- 3-2 构造函数的调用
- JDK容器学习之Map : HashMap,TreeMap,LinkedHashMap对比
- Android锁屏实践
- 打字游戏
- node基础
- Spark学习(一)基础介绍
- 每天回顾linux命令(tail)
- 桶排序
- 用单分支条件语句(if语句)求最值
- 人生的要务:提高自己的思维层次
- Linux常用命令
- 栈的应用举例:二进制的转换
- Intent(显式意图,隐式意图)