学生尝试复制下划线的扩展函数

Student attempting to replicating underscore's extend function

本文关键字:扩展 函数 下划线 复制      更新时间:2023-09-26

嗨,我正在尝试基于下划线创建扩展函数。 我不知道该怎么做。 我已经成功地创建了其他下划线属性的其他副本,但这个只是没有提出任何想法。 我希望有人能解释如何使用原生JavaScript创建._extend以及它是如何工作的。 这是起始框架。 提前谢谢。

var extend = function(obj){

}

下划线扩展方法基本上接受destinationsources两个参数,并返回destination对象。要复制其功能,一个简单的 Object.assign 就可以了。

例如

var extendObject = function (destination, ...sources) {
  return Object.assign(destination, ...sources);
}

如果您注意到,上面的方法使用 Rest 参数,该参数仅受 ES>= 2015 支持。如果你想支持较低版本的 ES,你可以简单地做,

var extendObject = function (destination, source) {
  return Object.assign(destination, source);
}

用法

var dest = {a: 1, b: 2};
var src1 = {c: 3, d: 4};
var src2 = {e: 5, f: 6};
// ES >= 2015
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4}
extendObject(dest, src1, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}
// ES <= 5
extendObject(dest, src1); //{a: 1, b: 2, c: 3, d: 4}
extendObject(dest, src2); //{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}

Object.keys(myObj) 给你一个数组,其中包含你对象中的所有键(属性名称)。然后,只需迭代此数组并根据键名称将源对象的值克隆到目标对象中即可。您可以像这样克隆对象键:

dest['someAttr'] = origin['someAttr'];

假设 origin.someAttr 的值为 5。完成上述操作后,您的"dest"对象也应该有一个值为 5 的 dest.someAttr。