在浏览underscorejs的方法列表时,我不禁注意到一个我之前不记得的方法:extendOwn

documentation for this method表示以下内容:


extendOwn _.extendOwn(destination,* sources)别名:分配

与extend类似,但是仅将自己的属性复制到目标对象。


我了解.extend()的用法及其用途...但是对于我一生,我无法理解它与 .extendOwn()有何不同。

我尝试使用.extend(),然后使用 .extendOwn()扩展一些对象,只是看是否可能会发生一些明显的事情-但它们似乎都产生相同的结果。

var a = {
    foo: false
};

var b = {
    bar: true
};

// This will produce { foo: false, bar: true }; ..just like _.extend() would =\
_.extendOwn( a, b );


任何对此神秘事物的见识将不胜感激!

最佳答案

“自有财产”是JS中的技术术语。对象自身的属性是它没有继承的属性。

这是一个简短的片段,展示了extendextendOwn的不同行为:

// lines have length
line = { length: 4 }

// planes have width and inherit length
plane = Object.create(line)
plane.width = 5
plane.length  // 4

// making a cube object, using extend
cube = _.extend({ height: 6 }, plane)
cube.length  // 4

// making a cube object, using extendOwn
notACube = _.extendOwn({ height: 6 }, plane)
notACube.length  // undefined


如您所见,extendOwn仅复制直接在源代码上定义的属性,而extend也复制沿其原型链定义的属性。还要注意_.has的对称性:

_.has(plane, 'width')   // true
_.has(plane, 'length')  // false

关于underscore.js - underscorejs -extendOwn与extend有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29017446/

10-09 23:02