2015-08-04 8 views
1

Может ли nodejs иметь две функции в разных классах с одинаковым именем? Если нет, то почему бы и нет? в противном случае в коде что-то не так.Именованные функции в разных классах поддерживаются в Nodejs?

Ниже приведен пример;

var admins = require('./routes/admins'); 
var users = require('./routes/users'); 

И одноэлементные классы

var users = function users(){ 

    this.foo = foo = function(bar){ ... 
    } 
} 

users.getInstance = getInstance = function(){ 
    if(this.instance == null){ 
     this.instance = new users(); 
    } 
    return this.instance; 
} 

module.exports = users.getInstance(); 

админ класс также похожи, оба класса имеют одинаковые имена функций, а также.

Теперь, когда Foo называется она вызывается из пользователя класса независимо от того, что. Если я меняю , то требуйте. foo класса admin.

+1

Заранее задайте этот вопрос. Вы не совсем поняли, о чем вы спрашиваете, хотя предоставленная вами информация указывает на начало вопроса, стоящего на пути понимания и ответа, поскольку вы испытываете проблему с порядком загружаемых элементов и учитываете обработку во время выполнения двух одинаковых функций. –

+0

Я отредактировал вопрос, но я действительно верю, что вопрос был довольно прямым. –

ответ

3

Как буквально написано в вашем вопросе, я не вижу причины, почему это произойдет. Тем не менее, вы просачиваетесь в глобальную область, и именно так вы можете получить дубликаты.

users.getInstance = getInstance = function(){ ... 

Во-первых, обратите внимание, что средний getInstance не с областью действия var, поэтому он получает назначен на глобальную область видимости. Хотя это не вызывает проблем, вы все еще загрязняете глобальную сферу, что плохо.

Реальная проблема возникает, если вы просто сделать:

module.exports = getInstance(); 

ли или нет у вас с областью действия getInstancevar, вы вызываете его в глобальном контексте, что означает, что внутри функции, this == global. Это означает, что первый раз запускается функция, это в основном делает:

global.instance = new users(); 

... и когда работает ваш второй файл, он видит уже есть global.instance и просто возвращает его.

Рассмотрите возможность использования 'use strict';, чтобы эти ошибки были пойманы для вас.


Наконец - почему вы делаете все эти getInstance гимнастику? Они совершенно не нужны. Файл ваших пользователей должен выглядеть так:

exports.foo = function(bar) { 
    ... 
}; 
+0

Я новичок в javascript, да, вы правы –

1

Поскольку имя функции одинаково и код выполняется в последовательном порядке, функция внутри второго класса переопределяет первую.

Таким образом, функция будет вызываться из того файла, который находится на втором месте.

+0

Различные классы, одноименные функции. Смещает ли nodejs их? –

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