从匿名函数引用自我



不知道如何措辞,我基本上想扩展我的类属性,以便用户可以覆盖它们。但是,我更喜欢将属性扩展到仅自执行的匿名函数。

var extend = function(target, sources) {
if (!sources.length) return target;
const source = sources.shift();
if (isObject(target) && isObject(source)) {
for (const key in source) {
if (isObject(source[key])) {
if (!target[key]) Object.assign(target, { [key]: {} });
extend(target[key], source[key]); // <-- Line 9
} else {
Object.assign(target, { [key]: source[key] });
}
}
}
return extend(target, sources);
}.call(this, this, [ defaults, options ]);

这似乎一直工作到第 9 行(请参阅上面的代码注释(。它似乎无法引用自己。但是,如果这是一个命名函数而不是匿名函数,这似乎可以正常工作。

我怎样才能让它工作?

为什么需要匿名?调试变得更糟。您仍然可以使用函数表达式。

const myfunc = function nameFunctionExpression(i) {
if(i === 10) {
return i;
}
nameFunctionExpression(i + 1);
};
myfunc(0);

我不确定你想完成什么。提供覆盖属性的方法?也许发布使用示例?

function extend(obj, rest) {
return Object.assign(obj, rest);
}
const obj = { a: 1, nested: { c: 3 } };
// { a: 2, nested: { c: 4 }, b: 3 }
console.log(extend(obj, { a: 2, b: 3, nested: { c: 4 } }));

最新更新