这行Javascript代码可能做什么?

时间:2017-05-10 13:02:29

标签: javascript

我在我目前正在工作的项目中偶然发现了一行代码。我觉得我在Javascript方面不错,但说实话,我不知道以下代码行是什么实际上:

var date = new (Function.prototype.bind.apply(Date, [null,].concat(buildDateParams(spec, base))));

你们这些Javascript专家可能会对此有所了解吗?

buildDateParams似乎构建了一个值数组。为了完整性'为了这个功能:

function buildDateParams(spec, base) {
    if (!spec.match(specRegExp)) {
        throw new Error('Invalid spec string');
    }
    var specParts = spec.toLowerCase().split(':');
    let params = [];
    for (let fieldIndex in fields) {
        let field = fields[fieldIndex];
        let specPart = (fieldIndex < specParts.length)
            ? specParts[fieldIndex]
            : '0';
        if (!specPart.length) {
            specPart = 'b';
        }
        let param = 0;
        if (specPart.substr(0, 1) === 'b') {
            param = base[field.getter]();
            specPart = specPart.substr(1);
        }
        if (specPart.length) {
            param += parseInt(specPart);
        }
        params.push(param);
    }
    return params;
}

1 个答案:

答案 0 :(得分:5)

它是

的复杂版本
Date.bind(null, buildDateParams(spec, base));

除了一个有效的;我们的想法是,它希望将Date构造函数绑定到由buildDateParams()函数生成的一组参数。

使用ES2015扩展语法,它可以写

Date.bind(null, ... buildDateParams(spec, base));

它只是根据一些预先安排的参数创建一个返回Date实例的函数。

此外,由于[null,]数组初始值设定项中的逗号逗号,它可能在IE中存在问题(尽管带有.bind()的现代IE可能不会将该数组解释为具有两个元素)。