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.js
个require
,a.js
个文件。 b.js
文件如下所示
var search = require("./search");
search.setPaths();
我在这里尝试使用a.js
内b.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文件中使用它?
答案 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();