当前位置:首页 > VUE

vue实现$.extend

2026-01-12 18:43:39VUE

实现类似 jQuery 的 $.extend 功能

在 Vue 中可以通过多种方式实现类似 jQuery 的 $.extend 功能,用于深度合并对象。以下是几种常见方法:

使用 Object.assign 进行浅合并

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2);
// 结果: { a: 1, b: 2 }

使用展开运算符进行浅合并

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = { ...obj1, ...obj2 };
// 结果: { a: 1, b: 2 }

实现深度合并函数

function deepExtend(target, ...sources) {
  if (!sources.length) return target;
  const source = sources.shift();

  if (isObject(target) && isObject(source)) {
    for (const key in source) {
      if (isObject(source[key])) {
        if (!target[key]) Object.assign(target, { [key]: {} });
        deepExtend(target[key], source[key]);
      } else {
        Object.assign(target, { [key]: source[key] });
      }
    }
  }

  return deepExtend(target, ...sources);
}

function isObject(item) {
  return item && typeof item === 'object' && !Array.isArray(item);
}

// 使用示例
const obj1 = { a: 1, nested: { x: 10 } };
const obj2 = { b: 2, nested: { y: 20 } };
const merged = deepExtend({}, obj1, obj2);
// 结果: { a: 1, b: 2, nested: { x: 10, y: 20 } }

使用 lodash 的 merge 方法

import { merge } from 'lodash';

const obj1 = { a: 1, nested: { x: 10 } };
const obj2 = { b: 2, nested: { y: 20 } };
const merged = merge({}, obj1, obj2);
// 结果: { a: 1, b: 2, nested: { x: 10, y: 20 } }

在 Vue 组件中使用 mixins

Vue 本身提供了 mixins 功能,可以用于合并组件选项:

vue实现$.extend

const mixin = {
  data() {
    return {
      message: 'hello',
      foo: 'abc'
    }
  }
}

new Vue({
  mixins: [mixin],
  data() {
    return {
      message: 'goodbye',
      bar: 'def'
    }
  },
  created() {
    console.log(this.$data)
    // 结果: { message: 'goodbye', foo: 'abc', bar: 'def' }
  }
})

注意事项

  • 浅合并只处理第一层属性,深合并会递归处理所有嵌套对象
  • 数组通常不会被深度合并,而是会被覆盖
  • 使用 lodash 的 merge 函数可以处理更复杂的合并场景
  • 在 Vue 中修改响应式对象时应该使用 Vue.set 或展开运算符确保响应性

标签: vueextend
分享给朋友:

相关文章

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue实现列表

vue实现列表

Vue 实现列表的方法 在 Vue 中实现列表渲染通常使用 v-for 指令,可以动态生成多个元素。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 遍历数组,生成列表项。v-for 需要…