@prosto_anton

Почему свойства-функции не видны в конструкторе класса nodejs?

Есть конструктор типа:
"use strict"; // не влияет на возникновение ошибки
function Make() {
     this.aaa = function () {};  // любая функция с именем или без
}
exports.Make = Make;  // Экспортирую конструктор

Далее создается экземпляр:
var elem = new Make();
Проблема в том, что nodejs считает свойство elem.ааа равным undefined при выполнении скрипта в обычном режиме и во встроенном отладчике, но когда я в терминале запускаю интерпретатор nodejs и подключаю файл с этим конструктором, а после создаю экземпляр:
a = require("./Make.js");  // добавляю var -- получаю undefined
    b = new a.Make();  // добавляю var -- получаю undefined

то этот экземпляр обладает свойством ааа и работает корректно.

P.S.: 3 дня пытаюсь понять в чем дело, простите, если вопрос тупой.
  • Вопрос задан
  • 2515 просмотров
Решения вопроса 1
fart
@fart
> var mk=require("./Make.js");
undefined
> var elem = new mk.Make();
undefined
> console.log(typeof elem.aaa);
function
undefined
> elem.aaa();
undefined

.............. ПЕРЕОПРЕДЕЛИЛ:  this.aaa = function () { return "OK"; }

> var mk=require("./Make.js");
undefined
> var elem = new mk.Make();
undefined
> console.log(typeof elem.aaa);
function
undefined
> elem.aaa();
'OK'


undefined - это возврат последней выполненной команды в режиме REPL, заметьте console.log тоже вернул undefined. т.е в первом случае elem.aaa(), вернул undefined т.к. this.aaa = function () {}; действительно ничего не возвращает. Но в тоже время js видит функцию-выражение elem.aaa.
typeof elem.aaa === 'function'

Возврат undefined node в режиме REPL можно изменить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы