2017-01-15 7 views
-3

У меня есть функция, которая возвращает объект в javascript. Возвращаемые объекты являются экземплярами «messagePack», которые я хочу отправить на сервер. Каждый messagePack будет другим. Например .:Возврат объекта из функции в JavaScript

function someFunc() { 
     return { 
      name: "chatMessage", 
      time: Date.now(), 
      data: "yooo hoooo", 
      hash: hashFunc()    
     } 
    } 

Затем я создаю создать messagePack и добавить его в массив:

var messagePack = someFunc(); 

    msgArray.push(messagePack) 

ли это нормально? Должен ли я создавать конструктор для пакета сообщений и использовать новое ключевое слово? Я видел, как это делалось в подобной ситуации, но я не понимаю, почему то, что я делаю, не работает.

+0

примечание: хэш не используется для обеспечения безопасности. –

+0

Лучше создать функцию-конструктор, чтобы вы могли установить новые 'name' и' data' для каждого нового экземпляра. – superUser

+0

Это похоже на вопрос, который полностью основан на мнениях или может быть переработан, чтобы сделать его по теме для кода Обзор Stackexchange. – Quentin

ответ

-2

Это фабричный шаблон, это совершенно правильно. Вам не нужно использовать конструктор.

+1

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

+0

Правильно, каждый вызов someFunc() возвращает новый литерал. Фабрики - хороший способ работать, это позволяет избежать использования «этого», которое может сбивать с толку несколько раз. Дуглас Крокфорд сделал очень хорошую речь о функциях javascript: https://www.youtube.com/watch?v=ya4UHuXNygM (в 1:00:00 он охватывает конструкторы и наследование, но вся речь интересна) – Booster2ooo

+0

Прохладная ссылка и Спасибо. –

0

Конструктор полезен, когда у вас есть несколько объектов, содержащих одни и те же данные, e. г. функций или констант. Поскольку у вас нет данных ретрансляции (я считаю), они вам не нужны. если у вас есть повторяющиеся данные, вы можете сделать это:

var message_prot={ 
    name: "chatMessage", 
     time: Date.now(), 
     data: "yooo hoooo", 
     hash: false 
}; 

function somefunc(){ 
    a=Object.create(message_prot); 
    a.name="Hi"; 
    a.hash=hashfunc(); 
    return a; 
} 
+0

Afaik, это все еще фабрика, а не функция конструктора. Конструктор воспользуется 'this', не возвращает объект, а' this' и должен быть вызван с 'new' – Booster2ooo

+0

@ Booster2ooo: но технически никакой разницы с конструктором (вывод, внутренний дизайн) –

+0

действительно, вот почему anwser к вашему другу --- Крыса «нет», вы можете сделать это, не используя «фактический» конструктор. – Booster2ooo