2016-09-11 2 views
1

Я создал класс внутри пространства имен в node.js 4.5.0, реализация которого такова:Как экспортировать класс, реализованный в пространстве имен В node.js

// 
// Contents of MyList.js 
// 
"use strict"; 

var MyCollections {}; 

(function() {  
    this.List = function() { 
    // 
    // Simple List implementation ... 
    // 
    } 
}).apply(MyCollections); 

В моем скрипте, где я хотел бы создать экземпляр класса MyCollections.List, я закодировал следующее;

// 
// Contents of CheckList.js 
// 
"using strict"; 

var collections = require('../MyList'); 

var list = new collections.List(); 

При запуске вышеуказанного скрипта через узел я получаю следующее:

PS C:\work\node.js\MyCollections\List> node .\CheckList.js 
Number of Items in List: 2 
C:\work\node.js\MyCollections\List\CheckList.js:6 
var list = new collections.List(); 
     ^
TypeError: collections.List is not a function 
    at Object.<anonymous>  (C:\work\node.js\MyCollections\List\CheckList.js:6:12) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at startup (node.js:139:18) 
    at node.js:974:3 

Учитывая реализацию класса List в MyList.js выше, что я должен изменить, чтобы сделать класс Списка экспортируемого, так что я могу использовать его в более чем одном сценарии?

Приносим извинения, если это было ранее отправлено и получено, поскольку я, возможно, использовал неправильные термины в описании того, что я пытаюсь сделать. Я намерен объявить пространство имен и выставить прототипы функций, которые реализуют класс коллекции, в данном случае простой список, сохраняя при этом некоторую степень инкапсуляции . Я считаю, что реализация класса List верна, так как когда я пытаюсь создать экземпляр и заполнить список целых чисел в том же скрипте MyList.js, функции в списке работают, как ожидалось. Например;

// 
// Statements after (function() { //... }).apply(MyCollections); 
// 

var list = new MyCollections.List(); 

list.append(1); 
list.append(2); 
list.append(3); 
list.append(4); 

console.log("Number of Items in List: " + list.count()); 

while (list.hasNext()) { 
    var trace = 
    'Item ' + (list.position() + 1) + ' of ' + list.count() + ' = ' + 
    list.getItem(); 

    console.log(trace); 

    list.next(); 
} 

// 
// Output: 
// 
Number of Items in List: 4 
Item 1 of 4 = 1 
Item 2 of 4 = 2 
Item 3 of 4 = 3 
Item 4 of 4 = 4 

Заранее благодарю вас за ваше время, помощь и терпение.

ответ

1

Вам необходимо экспортировать MyCollections. Добавьте следующие строки в MyList.js:

module.exports = MyCollections; 

Так обновленный файл имеет следующее содержание:

// 
// Contents of MyList.js 
// 
"use strict"; 

var MyCollections = {}; 

(function() {  
    this.List = function() { 
    // 
    // Simple List implementation ... 
    // 
    } 
}).apply(MyCollections); 

module.exports = MyCollections; 
+1

Спасибо за быстрый ответ; ваш ответ работает на месте: «использовать строгий»; var collections = require ('./ List'); var list = новые коллекции.List(); – ClockEndGooner

+0

@ClockEndGooner (thumbsup) –

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