2014-10-15 4 views
-1

Я пытаюсь извлечь некоторую функциональность a popular open source project, поэтому я могу использовать его как утилиту. Функциональность находится в a particular file, и по внешнему виду она должна работать автономно (aka $ node filename.js в командной строке). Но это приводит к ошибке.Невозможно установить свойство «X» неопределенного

После проверки файла, я изолировал синтаксис, который производит ошибку и создал минимальный пример:

Файл <path>\lib.js:

var Lib; 

(function() { 

    function X() {}; 
    X.prototype = { 
     foo: function() { console.log('foo'); }, 
     bar: function() { console.log('bar'); } 
    }; 

    Lib.X = X; 

    Lib.Method = function(message) { 
     this.x = new X(); 
     console.log(message); 
    } 
})(); 

Lib.Method('foobar'); 

Когда запускается в командной строке:

<path>$ node lib.js 

Node.js производит следующую ошибку:

<path>\lib.js:11 
     Lib.X = X; 
    ^
TypeError: Cannot set property 'X' of undefined 
    at <path>\lib.js:11:8 
    at Object.<anonymous> (<path>\lib.js: 
16:2) 
    at Module._compile (module.js:446:26) 
    at Object..js (module.js:464:10) 
    at Module.load (module.js:353:31) 
    at Function._load (module.js:311:12) 
    at Array.0 (module.js:484:10) 
    at EventEmitter._tickCallback (node.js:190:38) 

Я вижу, что проблема находится в заявлении Lib.X = X;. Но я не уверен, что эта строка нарушает любые синтаксические/семантические правила. Я понимаю эту строку как: присваиваю function X свойству X переменной Lib.

Что я делаю неправильно?

+0

@downvoter: Уход объяснить, почему? Не очень заинтересованы в повторениях. Но разве это не показывает никаких исследований? Или это неясно? Или бесполезно? : D – Krumia

+0

Я не спускал вниз, но, похоже, это вопрос по теме, ясный, даже если это была пропущенная проблема. –

ответ

4

Lib не определено. undefined не является объектом, поэтому вы не можете установить какие-либо свойства на нем. Вы, вероятно, хотите, чтобы это в начале файла:

var Lib = {}; 
+0

Ах! Ты подтолкнул меня на это. Он пришел ко мне через несколько секунд после того, как я опубликовал вопрос. Примите этот ответ после 15 минут. – Krumia

+0

@Krumia Спасибо, мы все время делаем глупые ошибки: p – simonzack

3

Переменная Lib не определен, так что вы не можете ничего к нему назначить.

Вам нужно определить его первый, как минимальный пример:

var Lib = {}; 
+0

Спасибо @Brendan: + 1ed. Тем не менее, принимая ответ Симонзака, поскольку он был на несколько секунд раньше вас. :) – Krumia

+0

@ Krumia действительно является борьбой за то, чтобы быть первым. :) Благодаря. –

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