最近,我为一个 OP 编写了这个函数:
$.prototype.reduce = function reduce(obj1, obj2) {
for (var k in obj2) {
if (obj1.hasOwnProperty(k) && obj2.hasOwnProperty(k)) {
if (typeof obj1[k] == "object" && typeof obj2[k] == "object") {
reduce(obj1[k], obj2[k]);
}
else delete obj1[k];
}
}
}
该函数利用命名函数表达式的特性来利用递归。我现在想知道,如何使用新的箭头函数来完成相同的行为,因为它们根据定义总是匿名的。
$.prototype.reduce = (obj1, obj2) => {
for (var k in obj2) {
if (obj1.hasOwnProperty(k) && obj2.hasOwnProperty(k)) {
if (typeof obj1[k] == "object" && typeof obj2[k] == "object") {
XXXX }
else delete obj1[k];
}
}
}
代替XXX
,我会有以下想法:
1. arguments.callee(obj1[k], obj2[k]);
(显然已弃用)
2. $.reduce(obj1[k], obj2[k])
(调用函数变量本身 - 对于自调用函数表达式将失败)
3.继续使用“经典”的函数表达式
还有更多我错过的方法吗?在双箭头函数中使用递归的最佳方法是什么?