什么时候过滤原型链?

时间:2013-06-28 19:42:42

标签: javascript underscore.js

我注意到_.extend的实现将复制包括原型链在内的所有内容。

我注意到_.each将过滤原型链上的属性。

我原本希望_.extend在默认情况下过滤掉原型链上的属性。如果是这样的话_.each可以使用两次,而不是仅仅执行一次_.extend

为什么_.extend中的原型链不会像_.each中那样过滤?

1 个答案:

答案 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'}