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
的对象,并向其原型(prototype)添加了一个变量和一个函数。最后我导出了搜索对象。
我有 b.js
文件,需要
、a.js
文件。 b.js
文件如下所示
var search = require("./search");
search.setPaths();
我在这里尝试的是在b.js
中使用a.js
的所有函数和变量。但是当运行 b.js
时,Node JS 返回以下错误
TypeError: search.setPaths is not a function
我尝试导出搜索
的新对象。
var obj = new search();
module.exports.search = obj;
并再次在文件b.js
中创建一个新的search
对象
var search = require("./a");
var obj = new search();
search.setPaths();
但这两次尝试都失败了。我使用原型(prototype)的原因是,还有一些继承 search
对象原型(prototype)的对象。那么有什么方法可以导出这个 search
对象并在另一个 JavaScript 文件中使用它吗?
最佳答案
试试这个:
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
search 是一个构造函数,而不是一个对象。在 b.js 文件中,您使用的是 search 的原型(prototype)函数 setPaths,但 search 是一个函数对象,这意味着它连接的不是 Function.prototype 搜索原型(prototype)。如果你想直接从不同的文件使用原型(prototype)函数,你应该导出实例化的对象,而不是构造函数:
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();
关于javascript - 需要另一个 JavaScript 文件中的 Javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894798/