2012-01-19 2 views
2

Я искал вокруг переполнения стека и веб-страницы в целом, для достойного объяснения чего-то, что я вижу в некотором унаследованном JavaScript. Пока мне не повезло, поэтому я решил принять крайнюю меру, чтобы опубликовать вопрос. :-)Методы создания объектов JavaScript

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

Так вот мы идем:

Обычно, когда я смотрю @ код, который создает 'классы' JavaScript я вижу что-то вроде:

var SomeClass = function() { ..stuff.. } 

...other code... 

var objSomeClass = new SomeClass(); 

Также знакомый является JavaScript буквальным:

var someLiteral = { ..stuff.. } 

...other code... 

var someResult = someLiteral.someFunction(); 

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

var someLiteral = { ..stuff.. } 

...other code... 

var objSomeLiteral = new someLiteral(); 

Кроме того, в том же коде декларации, как это:

function doStuff() { ..stuff.. } 

...other code... 

var objDoStuff = new doStuff(); 

Опять же, я никогда не видел, чтобы кто писать код, совсем как это раньше.

Является ли этот семантически неправильный код, или есть какая-то веская причина для этого так, что я просто не знаю? Это всегда возможно, на данный момент я не претендую на экспертизу JavaScript.

Код определенно работает, но если это не «хороший» код, тогда я хочу его переписать. Потому что я просто анал. :-)

Спасибо!

+0

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

+0

Я бы хотел опубликовать оригинальный код, но я чувствую, что мне придется сначала его сначала дезинфицировать. Да, я знаю - это JavaScript и технически любой, кто действительно хотел бы посмотреть на него. Но я бы предпочел не публиковать его, поскольку он связан с нашим процессом аутентификации пользователей. –

+0

Итак, Case 1 & Case 4 функционально эквивалентны. Я этого не знал. Хотя сейчас кажется очевидным, что я действительно об этом думаю. :-) –

ответ

2

new <Object> является синтаксической ошибкой. Это просто недействительный JavaScript. Операнд new должен быть функцией.

Также использование функций в качестве таких конструкторов, как вы показали в вашем примере «класс», является очень распространенной практикой.

+0

Это именно то, что я думал. Всегда возможно, что конкретный блок кода, где я сталкивался с этим, на самом деле никогда не выполняется на практике. Что объясняет, почему вещи кажутся «рабочими». В любом случае спасибо за помощь. –

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