2014-02-04 3 views
1

У меня есть функция-конструктор, который служит, чтобы перевести новые данные в массив (в данном случае, allEntries)Передача нескольких объектов в функции конструктора

function entry (title, info) { 
    this.title = title; 
    this.info = [ { name : info } ]; 
} 
var allEntries = [] 

Я пытаюсь выяснить, как передать несколько объектов для this.info, что-то вроде:

allEntries.push(new entry('title one', ['info 1', 'info 2'])); 

для того, чтобы получить что-то вроде:

{ 
    title: 'title one', 
    info : [ 
      { name: 'info 1'}, 
      { name: 'info 2'} 
     ] 
} 

Как мне это сделать?

+1

Я исправил некоторые очевидные ошибки синтаксиса. – crush

ответ

2

Передайте массив и перейдите по нему, чтобы добавить все элементы, используя Array.prototype.forEach.

function entry (title, info) { 
    this.title = title; 
    this.info = []; 
    info.forEach(function (infoItem) { 
     this.info.push({ name : infoItem}); 
    }, this); 
} 

Зов это следующим образом:

var myEntry = new entry('foobar', ['info1', 'info2']); 

КСТАТИ: Как правило, классы называются с прописной буквы перед, чтобы быть в состоянии отличить их от функций (которые всегда в нижнем регистре), так что вы migth хочу называть его «Entry».

+0

Нет необходимости перебирать информацию ... – crush

+0

Не возражаете? если 'info' - массив строк, а' this.info' должен быть массивом объектов, которые имеют строку, хранящуюся в атрибуте, называемом 'name', чем yes. –

+0

Вы правы. Я упустил из виду тот факт, что он хочет передать массив строк, и которые превращаются в массив объектов с именем «name» в качестве свойства, а строка - как значение. – crush

0

Эту проблему можно решить, обратившись к другому ...

http://jsfiddle.net/MattLo/Nz6BD/

function entry() { 
    this.title = null; 
    this.info = []; 
} 

entry.prototype.setInfo = function (info) { 
    this.info.push({name: info}); 

    return this; 
}; 

entry.prototype.setTitle = function (title) { 
    this.title = title; 

    return this; 
} 

var e1 = (new entry) 
    .setInfo('foo') 
    .setInfo('bar') 
    .setTitle('Hello World!'); 
+0

Сеттеры здесь не нужны. Это не делает ничего, что не может быть достигнуто с помощью инъекции зависимостей. – crush

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