2016-06-18 5 views
0
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 и добавил его прототип переменной и функции. Наконец, я экспортировал объект поиска.Требуется Javascript-файл в другом файле JavaScript

У меня есть 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?

ответ

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. Если вы хотите, чтобы с помощью прототипа функции непосредственно из другого файла, вы должны экспортировать инстанцированный объект, а не конструктор:

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(); 
+0

nope. он не работает – CoderS

+0

первый код в вашем вопросе, названный ** a.js **, но на самом деле вы импортируете **./search **, что означает **./search.js **, а не ** a .js **.Я думаю, что это проблема. – modernator

+0

Это потому, что фактическое имя файла - search.js. Я просто использовал a и b в качестве примера. Я скопировал фактический код и пропустил код здесь. Я редактировал вопрос. – CoderS

Смежные вопросы