我正在阅读 Michael Fogus 的书Functional JavaScript,书中的一个示例不起作用。这是代码:
function existy(x) {
return x != null;
};
function truthy(x) {
return (x !== false) && existy(x);
};
function cat() {
var head = _.first(arguments);
if (existy(head))
return head.concat.apply(head, _.rest(arguments));
else
return [];
};
function construct(head, tail) {
return cat([head], _.toArray(tail));
};
function rename(obj, newNames) {
return _.reduce(newNames, function(o, nu, old) {
console.log("o: " + o);
console.log("nu: " + nu);
console.log("old: " + old);
if (_.has(obj, old)) {
o[nu] = obj[old];
return o;
}
else
return o;
},
_.omit.apply(null, construct(old, _.keys(newNames))));
};
rename({a: 1, b: 2}, {'a': 'AAA'});
// => {AAA: 1, b: 2}
除 rename() 外,所有函数都能正常工作。本质上,它的目标是获取一个对象并返回具有使用 newName 对象更新的属性名称的对象。我不太了解它,但是 reduce 方法看起来不像它有正确的论点。这是我调用 rename() 时遇到的错误:
ReferenceError: old is not defined
任何帮助理解为什么它不起作用将不胜感激!