我通過邁克爾Fogus'電子書閱讀功能的JavaScript,和書中的例子之一是行不通的。代碼如下:錯誤功能的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方法看起來並不像它有正確的參數。下面是我得到當我打電話重命名()錯誤:
ReferenceError: old is not defined
任何幫助理解爲什麼它不工作,將不勝感激!
+1「我不相信一本書,在函數定義之後放分號......「 –
謝謝!任何建議我應該如何解決它? – EmptyArsenal
@EmptyArsenal:我還不太確定它的功能。是否需要'{a:52}'和'{a:「b」}'並生成'{b:52}'? – Ryan