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

时间:2015-08-05 19:12:49

标签: javascript object

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

this.importFonts = function() {
    var fonts = [
        {
            name : 'Oswald',
            family : 'Oswald',
            url : 'http://fonts.googleapis.com/css?family=Oswald'
        }
    ];
    var fontGroup = canvas.g();
    fonts.forEach(function(font){
        var snapFont = Snap.parse('<style type="text/css">@import url(' + font.url + ');</style>');
        fontGroup.add(snapFont);
    });
    fontGroup.selectAll('style').forEach(function(elm){
        elm.toDefs();
    });
    fontGroup.remove();
};

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

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;

enter image description here

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

1 个答案:

答案 0 :(得分:8)

您只是在没有上下文的情况下调用该函数(即TickersObj()而不是something.TickersObj()),因此其中的the value of this是默认对象(浏览器中为window)或undefined(严格模式)。大概是你处于严格的模式。

要创建函数的新实例,您必须使用the new keyword调用它。

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