gpt4 book ai didi

underscore.js - underscorejs - extendOwn 和 extend 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 23:33:44 25 4
gpt4 key购买 nike

通过underscorejs的方法列表,我不禁注意到一个我不记得以前存在过的方法:extendOwn

documentation for this method说:

extendOwn _.extendOwn(destination, *sources) Alias: assign

Like extend, but only copies own properties over to the destination object.



我明白了 .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还复制了沿其原型(prototype)链定义的那些。还要注意 _.has 的对称性:

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com