2015-08-05 3 views
0

Я создал функцию, чтобы генерировать и возвращать объект:Почему я получаю свойство undefined в моем объекте JavaScript?

function TickersObj(tag, array, boolLots, boolOptions, boolDisplay) { 
    tag   = tag   || {}; 
    array  = array  || []; 
    boolLots = boolLots || false; 
    boolOptions = boolOptions || false; 
    boolDisplay = boolDisplay || true; 

    console.log('tag = ', tag); 
    console.log('array = ', array); 
    console.log('boolLots = ', boolLots); 
    console.log('boolOptions = ', boolOptions); 
    console.log('boolDisplay = ', boolDisplay); 

    this.assoTikArray  = array; 
    this.lotsOfTags  = boolLots; 
    this.tagOptions  = boolOptions; 
    this.tagsHoverDisplay = boolDisplay; 
    return this; 
} 

Позже вниз в моем коде я прохожу в значениях, как так:

switch(type) { 
    case 'tagsPanel': 
     tag.tickers = data.data.ticker_tag.tickers; 
     var tickersObj = TickersObj(tag, tag.tickers, tag.lotsOfTags, true, true); 
     return tickersObj; 
     break; 
     .... 

Однако, как только он попадает в эту линию this.assoTikArray = array; я получаю ошибка Cannot set property assoTikArray of undefined

enter image description here

Мысли о том, что я делаю неправильно?

+0

В качестве альтернативы вы можете просто вернуть объект с этими ключами, вместо того, чтобы называть его конструктором. – Mathletics

+0

Правда .. но у меня есть 3 разных случая, фигурировала функция, чтобы она работала лучше в этом случае? –

+0

Нет, вы сохраняете функцию, но вместо того, чтобы присваивать свойства 'this' (что делает его конструктором), вы просто возвращаете объект,' return {assoTikArray: array, ...} '(делая его фабрикой.) – Mathletics

ответ

8

Вы просто вызов функции без контекста (т.е. TickersObj() и не something.TickersObj()), так the value of this внутри него либо объект по умолчанию (window в браузере) или undefined (в строгом режиме). Предположительно, вы находитесь в строгом режиме.

Чтобы создать новый экземпляр функции, вы должны называть его the new keyword.

var tickersObj = new TickersObj(tag, tag.tickers, tag.lotsOfTags, true, true); 
+0

Ah благодаря! С быстротой :) 11 минут ... –

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