当前位置:首页 > JavaScript

js实现extend

2026-02-01 06:58:10JavaScript

实现 extend 功能

在 JavaScript 中实现 extend 功能通常指将一个对象的属性和方法扩展到另一个对象上。以下是几种常见的实现方式:

使用 Object.assign

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

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

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

手动实现浅拷贝

如果需要在没有 Object.assign 的环境中实现 extend,可以手动遍历源对象的属性并复制到目标对象。

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

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

实现深拷贝

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

const extendDeep = (target, source) => {
  for (let 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 extended = extendDeep(obj1, obj2);
console.log(extended); // { a: { b: 1, c: 2 } }

使用 jQuery 的 extend 方法

如果项目中已经引入了 jQuery,可以直接使用其提供的 $.extend 方法。

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

使用 Lodash 的 extend 方法

Lodash 也提供了 _.extend 方法,功能类似于 Object.assign

js实现extend

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

注意事项

  • 浅拷贝只会复制对象的顶层属性,嵌套对象会被共享。
  • 深拷贝会递归复制所有嵌套对象,但可能会遇到循环引用的问题。
  • 使用 Object.assign$.extend 时,目标对象会被修改。如果需要保留原对象,可以传递一个空对象作为目标。
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const extended = Object.assign({}, obj1, obj2);
console.log(extended); // { a: 1, b: 2 }
console.log(obj1); // { a: 1 } (未被修改)

标签: jsextend
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…