这个Javascript对象键的目的是什么?

时间:2016-02-22 22:25:24

标签: javascript matterjs

在matter.js中考虑这个函数:

/**
 * Creates a new set of axes from the given vertices.
 * @method fromVertices
 * @param {vertices} vertices
 * @return {axes} A new axes from the given vertices
 */
Axes.fromVertices = function(vertices) {
    var axes = {};

    // find the unique axes, using edge normal gradients
    for (var i = 0; i < vertices.length; i++) {
        var j = (i + 1) % vertices.length,
            normal = Vector.normalise({
                x: vertices[j].y - vertices[i].y,
                y: vertices[i].x - vertices[j].x
            }),
            gradient = (normal.y === 0) ? Infinity : (normal.x / normal.y);

        // limit precision
        gradient = gradient.toFixed(3).toString();
        axes[gradient] = normal;
    }

    return Common.values(axes);
};

完成后,这里是Common.values()函数:

/**
 * Returns the list of values for the given object.
 * @method values
 * @param {} obj
 * @return {array} Array of the objects property values
 */
Common.values = function(obj) {
    var values = [];

    if (Object.keys) {
        var keys = Object.keys(obj);
        for (var i = 0; i < keys.length; i++) {
            values.push(obj[keys[i]]);
        }
        return values;
    }

    // avoid hasOwnProperty for performance
    for (var key in obj)
        values.push(obj[key]);
    return values;
};

我无法弄清楚轴对象的结构。我没有看到axes[gradient] = normal代码的重点,因为Common.values() function只返回值,因此,永远不会返回渐变?

1 个答案:

答案 0 :(得分:0)

是的,永远不会返回gradient,只有normal值。将它们填充到该对象中的整个过程是为了避免重复,正如评论所解释的那样:

// find the unique axes, using edge normal gradients

如果您有多个具有相似(最多三位数)渐变的法线,则只返回最后一个法线。