数组中新创建的对象从哪里获取其属性?

时间:2016-07-05 14:28:51

标签: javascript jquery arrays

我正在使用jquery float,偶然发现了一个我无法弄清楚的函数(控制台日志是我的):

function getOrCreateAxis(axes, number) {
            console.log(" ");
            console.log("getOrCreateAxis starting vars:");
            console.log("Axes:");
            console.log(axes);
            console.log("Axes -1:");
            console.log(axes[number-1]);
            console.log("Xaxes:");
            console.log(xaxes);
            console.log("options are:");
            console.log(options);


            if (!axes[number - 1])
                axes[number - 1] = {
                    n: number, // save the number for future reference
                    direction: axes == xaxes ? "x" : "y",
                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)
                };

            console.log("We're done in getOrCreateAxis, axes are:" + (axes == xaxes ? "x" : "y"));
            console.log(axes);
            console.log(" ");

            return axes[number - 1];
        }

据我所知,它接收一个空数组,检查是否存在某个索引,如果不存在,它会在该索引处创建具有属性“n”,“direction”和“options”的新对象(从另一个数组合并) )。

我无法弄清楚除了上面三个以外的所有其他属性来自哪里,当你在console.log中的轴数组:

enter image description here

据我所知,有一种构造函数在使用其他属性填充对象时自动踢,但我无法弄清楚它来自何处或如何触发。完整的Jquery Flot代码可用here,我正在努力的功能是980行。

问题可能有点抽象,但我觉得迷失在这里,因为我甚至不知道我在找什么,技术上。什么是创建其他属性,哪里可以阅读更多相关信息?

1 个答案:

答案 0 :(得分:0)

在您粘贴的函数(getOrCreateAxis())中未添加刻度 - 它也会在Initialization阶段发生,但稍后会在setupGrid()函数中发生:

// initialize
initPlugins(plot);
parseOptions(options_);
setupCanvases();
setData(data_);
setupGrid();
draw();
bindEvents();

如果您跟踪setupGrid(),您会注意到calls the function you're looking for - setTicks()line 1823中声明了它:

function setTicks(axis) {
    var oticks = axis.options.ticks, ticks = [];
    if (oticks == null || (typeof oticks == "number" && oticks > 0))
        ticks = axis.tickGenerator(axis);
    else if (oticks) {
        if ($.isFunction(oticks))
        // generate the ticks
            ticks = oticks(axis);
        else
            ticks = oticks;
    }

    // clean up/labelify the supplied ticks, copy them over
    var i, v;
    axis.ticks = [];
    for (i = 0; i < ticks.length; ++i) {
        var label = null;
        var t = ticks[i];
        if (typeof t == "object") {
            v = +t[0];
            if (t.length > 1)
                label = t[1];
        }
        else
            v = +t;
        if (label == null)
            label = axis.tickFormatter(v, axis);
        if (!isNaN(v))
            axis.ticks.push({ v: v, label: label });
    }
}