在浏览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中的技术术语。对象自身的属性是它没有继承的属性。
这是一个简短的片段,展示了extend
和extendOwn
的不同行为:
// 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/