我注意到_.extend的实现将复制包括原型链在内的所有内容。
我注意到_.each将过滤原型链上的属性。
我原本希望_.extend
在默认情况下过滤掉原型链上的属性。如果是这样的话_.each
可以使用两次,而不是仅仅执行一次_.extend
。
为什么_.extend
中的原型链不会像_.each
中那样过滤?
答案 0 :(得分:1)
文档没有提到它是否读取原型链。
从他们的代码_.clone
方法中,他们使用_.extend
创建浅层副本。这可能是_.extend
读取原型链的真正原因......并非这是一个很好的理由。但是,除了原始对象之外,我从不使用_.extend
传递任何内容
_.clone需要它的原因示例
function Base(a) {
this.a = a;
}
Base.prototype = {b: 'b'};
var obj = new Base('a')
console.log($.clone({x: 'x'}, obj))
// Most people would expect the output to be
// {x: 'x', a: 'a', b: 'b'}
// If it didn't read the prototype, it would only be
// {x: 'x', a: 'a'}