为什么我的JavaScript对象中的属性未定义?

Leo*_*ban 0 javascript object

我创建了一个生成并返回对象的函数:

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;
}
Run Code Online (Sandbox Code Playgroud)

稍后在我的代码中我传递的值如下:

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

然而,一旦它到达这一行this.assoTikArray = array;我得到错误Cannot set property assoTikArray of undefined

在此输入图像描述

关于我做错了什么的想法?

Que*_*tin 8

你只是在没有上下文的情况下调用函数(即TickersObj()没有something.TickersObj()),所以它里面的值this是默认对象(window在浏览器中)或undefined(在严格模式下).大概你是在严格的模式.

要创建与调用它的功能的新实例new关键字.

var tickersObj = new TickersObj(tag, tag.tickers, tag.lotsOfTags, true, true);
Run Code Online (Sandbox Code Playgroud)