2011-01-09 4 views
2

Пытается создать объект в Javascript (для Appcelerator/Titanium). «объект» определяется следующим образом:Результат выражения 'xxxx' не является конструктором в JS

function server() { 
    this.cacheimages = 0; 
    this.login = ""; 
    this.name = ""; 
    this.root = ""; 
    this.signup = ""; 
    this.useimages = 0; 
    this.userexists = ""; 
    this.isdefault = 0; 

    return this; 
} 

В том же файле, в другой функции, когда я запускаю эту строку: var server = new server(); я получаю ошибку Result of expression 'server' is not a constructor.
Я попробовал его и без «возвращения» линии, не работают. Что я делаю не так?

+1

Позже вы снова выполните 'var server = new server();'? Если это так, это ваша проблема, поскольку вы заменили 'server' на' server'. Попробуйте переименовать переменную или функцию (например, 'function Server'), чтобы они не сталкивались. _Many, включая меня, используют соглашение о том, что функции-конструкторы названы с главной заглавной буквой. – Phrogz

+0

Выньте ответ и попробуйте использовать другое имя переменной. т. е. var myserver = new server(); –

+0

+1 к предложению Фрогца: * используйте соглашение о том, что функции конструктора названы с ведущей заглавной буквой. * Еще лучше: избегайте их вообще! Они просто ломаются, когда вызывающий абонент забывает «новый». Вместо этого напишите обычные функции. –

ответ

3

Что произойдет, если вы измените имя переменной?

var server2 = new server(); 
+0

+1 Дело в том, что 'function server()' создает переменную 'server', которая затем перезаписывается. – lonesomeday

+1

Да, и, кстати, 'return this' не требуется. –

2

Функции «first class citizens» в JavaScript, то есть они являются переменными (или еще лучше: объекты, как все в JavaScript является объектом). Таким образом, ваша функция конструктор также может быть записана в виде

var server = function() { 
//[...] 
} 

Теперь, если вы объявите новую переменную с именем server, это переписывает функцию конструктора, будучи переменной тоже.

Общепринятой практикой является определение имени функций конструктора. Если вы используете function Server() { ... }, var server = new Server (нет необходимости в скобках кстати), вы в порядке.

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

  • Нет связанных вопросов^_^