两种exports方式的区别
发布日期:2021-11-30 16:11:42 浏览次数:13 分类:技术文章

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

要在node中导出一个模块,在一种是直接导出一个object,function作为exports的属性;第二种方式是导出一个function,真正想导出的function写在prototype上:

exports.sayHello = sayHello;function sayHello(){    console.log("hello world");}
var obj = require("./method1");obj.sayHello();
另一种方式:

exports = module.exports = Person;function Person(){}Person.prototype.sayHello = function(){    console.log("hello world");}
var Person = require("./method2");var someone = new Person();someone.sayHello();
两种方式都可以,第一种更常见一点,不过也有很多开源框架用的是第二种方式(比如express)。如果用第二种方式,外部可以拿到导出的构造函数,有机会给它增加一些公共的方法:

var Person = require("./method2");Person.prototype.sayAge = function(){    console.log(100);}
另外一个好处,就是用第二种方法导出,在WebStrom里可以直接链接到prototype上的function定义,读代码比较容易点

还见过一种写法,是混合使用2种方式:

exports = module.exports = Person;function Person(){}Person.prototype.sayHello = function(){    console.log("hello world");}Person.sayName = function(){    console.log("my name is kyfxbl");}
var Person = require("./method2");Person.sayName();var someone = new Person();someone.sayHello();
因为在javascript里,function也是object,也可以有自己的属性,所以可以把别的function挂在这个构造函数上面

其实还有一个更简单的办法,在默认情况下,this,exports,module.exports指向同一个object,所以直接用

this.sayHello = sayHello;function sayHello(){    console.log("hello world");}
也可以导出sayHello函数,但是这样一来不直观,而且IDE也识别不了sayHello方法,所以不推荐使用

转载地址:https://kyfxbl.blog.csdn.net/article/details/19410151 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:javascript prototype chain
下一篇:MyBatis介绍

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月02日 22时37分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章