当前位置:首页 > JavaScript

js 实现extend

2026-03-14 09:46:27JavaScript

实现 extend 功能

在 JavaScript 中,extend 通常用于将一个对象的属性复制到另一个对象中。可以通过多种方式实现这一功能。

使用 Object.assign

Object.assign 是 ES6 提供的方法,用于将一个或多个源对象的可枚举属性复制到目标对象中。

js 实现extend

const extend = (target, ...sources) => {
  return Object.assign(target, ...sources);
};

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const result = extend(obj1, obj2);
console.log(result); // { a: 1, b: 2 }

手动实现 extend

如果不使用 Object.assign,可以手动遍历源对象的属性并复制到目标对象中。

js 实现extend

const extend = (target, ...sources) => {
  sources.forEach(source => {
    for (const key in source) {
      if (source.hasOwnProperty(key)) {
        target[key] = source[key];
      }
    }
  });
  return target;
};

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const result = extend(obj1, obj2);
console.log(result); // { a: 1, b: 2 }

深拷贝实现

如果需要深拷贝(嵌套对象的属性也被复制),可以使用递归的方式实现。

const extendDeep = (target, source) => {
  for (const key in source) {
    if (source.hasOwnProperty(key)) {
      if (typeof source[key] === 'object' && source[key] !== null) {
        target[key] = Array.isArray(source[key]) ? [] : {};
        extendDeep(target[key], source[key]);
      } else {
        target[key] = source[key];
      }
    }
  }
  return target;
};

const obj1 = { a: { b: 1 } };
const obj2 = { a: { c: 2 } };
const result = extendDeep(obj1, obj2);
console.log(result); // { a: { b: 1, c: 2 } }

使用 lodash 的 extend

如果项目中已经使用了 lodash,可以直接使用 _.extend_.assign 方法。

const _ = require('lodash');
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const result = _.extend(obj1, obj2);
console.log(result); // { a: 1, b: 2 }

注意事项

  • Object.assign 和手动实现的 extend 都是浅拷贝,只会复制对象的顶层属性。
  • 深拷贝实现会递归复制嵌套对象,但可能会遇到循环引用的问题。
  • 使用 lodash 的 _.extend_.assign 可以更方便地实现功能,但需要引入额外的库。

标签: jsextend
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…