博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js模块及模块加载机制解析
阅读量:5959 次
发布时间:2019-06-19

本文共 3408 字,大约阅读时间需要 11 分钟。

在Node.js中, 以模块为单位划分所有功能, 并且提供了一个完整的模块加载机制, 这使得我们可以将应用程序划分为各个不同的部分, 并且对这些部分进行很好地协同管理。 通过将各种可重用代码编写在各种模块中的方法, 我们可以大大减少应用程序的代 码量,提高应用程序的开发效率以及应用程序代码的可读性。

下面聊一聊从模块外部访问模块内的成员的方式。

 

一.使用exports对象

在一个模块文件中定义的本地(即非函数内定义的)变量、函数或对象只在该模块内有效,当需要从模块外部引用这些变量、函数或对象时,需要在模块文件内使用exports对象,方法如下所示。

var myMsg = "hello";var funcname=function(){    return 'I`m funcname1 function.'};exports.msg=myMsg;exports.funcname=funcname;

然后, 即可从模块外部访问这些变量、函数或对象。例如, 将上述代码保存为foo.js文件后, 即可使用如下所示的代码访问模块内的msg变量及funcname函数。

//加载当前目录下的foo.js模块文件并将其赋值给foo模块对象var foo = require('./foo.js'); //通过foo模块对象的msg属性访问foo.js模块内的myMsg变量 console. log (foo. msg) ; //通过foo模块对象的funcname属性访问foo.js模块内的funcname函数console.log(foo.funcname ());

 

二.将模块定义为类

也可以在模块文件内将exports对象书写为"module.exports", 但是在需要将模块定义为一个类时, 只能使用"module.exports" 的书写方法。修改foo.js为如下代码。

var _name, _age;var name = '',    age = 0;//模块对象的构造函数var foo = function(name, age) {        _name = name;        _age = age;    }    //获取私有变量_name的变量值foo.prototype.GetName = function() {        return _name;    }    //设置私有变量_name的变量值foo.prototype.SetName = function(name) {        _name = name;    }    //获取私有变量_age的变量值foo.prototype.GetAge = function() {        return _age;    }    //设置私有变量_age的变量值foo.prototype.SetAge = function(age) {    _age = age;}foo.prototype.name = name;foo.prototype.age = age;module.exports = foo;

新建一个加载foo.js模块文件的app.js脚本文件,在该脚本文件中,将执行如下所示的一列处理:

  1. 加载foo.js模块文件并使用模块文件中定义的foo类创建myFoo对象并初始化foo 类中定义的—name私有变量值及_age私有变量值。
  2. 使用myFoo对象的GetName方法获取_name私有变量值并在控制台中将其输出; 使用myFoo对象的GetAge方法获取—age私有变量值并将其在控制台中输出。
  3. 使用myFoo对象的SetName方法修改_name私有变量值;使用myFoo对象的 SetAge方法修改_age私有变量值。
  4. 使用myFoo对象的GetName方法获取修改后的_name私有变量值并在控制台中将 其输出;使用myFoo对象的GetAge方法获取修改后的_age私有变扯值并将其在控制台中输出。
  5. 直接获取myFoo对象的name公有变瞿值并在控制台中将其输出;直接获取myFoo对象的age公有变扯值并在控制台中将其输出。
  6. 直接修改myFoo对象的name公有变量值及age公有变量值。
  7. 直接获取myFoo对象的修改后的name公有变量值并在控制台中将其输出;直接获取myFoo对象的修改后的age公有变量值并在控制台中将其输出。

app.js脚本文件如下代码所示。

var foo = require('./foo.js');var myFoo = new foo ("Tom", 40);            //新建模块对象console.log("获取修改前的私有变位值"); console.log(myFoo.GetName());               //获取模块对象内的_name私有变量值console.log(myFoo.GetAge());                //获取模块对象内的_age私有变量值console.log("修改私有变量值");myFoo.SetName("Bob")                         //设置模块对象内的_name私有变量值 myFoo.SetAge(30)                             //设置模块对象内的_age私有变量值console.log("获取修改后的私有变量值"); console.log(myFoo.GetName());               //获取模块对象内的_name私有变昼值console.log(myFoo.GetAge());                //获取模块对象内的_age私有变量值console.log("获取修改前的公有变昼值"); console.log(myFoo.name);                    //获取模块对象内的name公有变量值console.log(myFoo.age);                     //获取模块对象内的age公有变量值console.log("修改公有变昼值");myFoo.name="Bob"                            //设置模块对象内的name公有变量值myFoo.age = 30                              //设置模块对象内的age公有变量值console.log("获取修改后的公有变世值"); console.log(myFoo.name);                    //获取模块对象内的name 公有变址值console.log(myFoo.age);                     //获取模块对象内的age公有变量值

 

三.为模块类定义类变量或类函数

当把模块定义为类时, 可以为该类定义类变械或类函数(相当于其他语言中的静态变量或静态函数, 在Node.js中称为类变量或类函数)。 接下来,我们修改 foo.js模块文件中的内容, 为foo类定义 一个staticName类变量与staticFunction类函数, 在 函数内部将staticName类变最值输出到控制台中, 代码如下所示。

//......foo.staticName = '';//定义类函数foo.staticFunction = function() {    console.log(foo.staticName);}module.exports = foo;

同时修改app.js文件中的内容, 在文件底部添加如下所示的代码, 以设置staticName类变量值并调用staticFunction类函数将staticName类变量值输出到控制台中。

//......console.log("获取变量值");foo.staticName='Static Name';foo.staticFunction();

转载于:https://www.cnblogs.com/johnvwan/p/9592874.html

你可能感兴趣的文章
Linux远程上传、下载文件的方法
查看>>
CentOS6.2 下安装OpenGL开发库
查看>>
模式识别之中文分词
查看>>
Web Service那点事
查看>>
TCP/IP协议体系结构简介
查看>>
WebApi身份认证解决方案:Basic基础认证
查看>>
js求时间差
查看>>
kylin 使用RESTful API 请求
查看>>
hive学习路线
查看>>
MySQL(十三)之MySQL事务
查看>>
不变的动力
查看>>
Java toString()方法的自动调用
查看>>
【Android】利用服务Service创建标题栏通知
查看>>
手指皮肤长期干/粗糙/小裂口问题
查看>>
ecshop验证码图片无法显示终极解决办法
查看>>
php中session_start()函数的作用
查看>>
Leetcode: Encode and Decode Strings
查看>>
iOS - Swift NSDate 时间
查看>>
采用ODAC,ODBC连接Oracle【转】
查看>>
多列等高布局
查看>>