需要另一个JavaScript文件中的Javascript文件

时间:2016-06-18 08:12:16

标签: javascript node.js

var FS = require('fs');
var Path = require('path');
var Jsonfile = require('jsonfile');

var search = function () {};

search.prototype.projectContainerDirPath = null;

/*
 * interface
 */
search.prototype.setPaths = function () {
  this.projectContainerDirPath =  Path.join(__dirname, '../projects');
};

module.exports.search = search;

这是我的a.js文件。在这个文件中,我创建了一个名为search的对象,并在其原型中添加了一个变量和一个函数。最后我导出了搜索对象。

我有b.jsrequirea.js个文件。 b.js文件如下所示

var search = require("./search");
search.setPaths();

我在这里尝试使用a.jsb.js的所有函数和变量。但是当运行b.js时,Node JS会返回错误

TypeError: search.setPaths is not a function

我尝试导出search的新对象。

var obj = new search();
module.exports.search = obj;

再次在文件search

中创建b.js的新对象
var search = require("./a");
var obj = new search();
search.setPaths();

但这两次尝试失败了。我使用原型的原因是,还有一些对象继承了search对象的原型。那么有什么方法可以导出这个search对象并在另一个JavaScript文件中使用它?

1 个答案:

答案 0 :(得分:1)

试试这个:

module.exports = search;

看起来'搜索功能'是构造函数,所以你应该更好地使用第一个字符作为大写来区分这是一个函数或构造函数,如下所示:

var Search = function() { ... }
var obj = new Search();

**更新**

好的,我再次阅读你的问题,我发现了错误的观点。在 search.js 文件中:

var search = function() {};
module.exports = search;   // module.exports.search and this syntax is same

搜索是构造函数,而不是对象。在b.js文件中,您使用的是搜索原型函数 setPaths ,但搜索是一个正常的函数对象,这意味着它连接了 Function.prototype 而不是的 search.prototype 即可。如果要直接从不同的文件使用原型函数,则应导出实例化的Object,而不是构造函数:

var search = function() {};
module.exports = new search();

这就是我所做的,它100%有效:

// server.js
var search = function() {};
search.prototype.setPaths = function() { ... };
module.exports = new search;  // you can skip () if argument is empty

这是b.js:

// b.js
var search = require("./search");
search.setPaths();