当前位置: 首页 > wzjs >正文

景德镇网站建设哪家最好昆明建设工程质量备案在哪个网站

景德镇网站建设哪家最好,昆明建设工程质量备案在哪个网站,网站开发与spark,ppt模板免费的网站推荐Vue 2 的 Object.defineProperty 的局限性 Vue 2 使用 Object.defineProperty 来实现响应式数据,但它有一些明显的局限性: 1. 无法监听属性的添加和删除 Object.defineProperty 只能监听已经存在的属性,无法监听动态添加或删除的属性。 例…
Vue 2 的 Object.defineProperty 的局限性

Vue 2 使用 Object.defineProperty 来实现响应式数据,但它有一些明显的局限性:

1. 无法监听属性的添加和删除
  • Object.defineProperty 只能监听已经存在的属性,无法监听动态添加或删除的属性。

  • 例如:

    const obj = { a: 1 };
    Vue.set(obj, 'b', 2); // 需要使用 Vue.set 才能让新属性变成响应式
    delete obj.a; // 需要使用 Vue.delete 才能触发更新
    
2. 无法监听数组的变化
  • Object.defineProperty 无法直接监听数组的变化(如 pushpopsplice 等操作)。

  • Vue 2 通过重写数组的原型方法来实现对数组的监听:

    const arrayProto = Array.prototype;
    const arrayMethods = Object.create(arrayProto);
    ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(method => {const original = arrayProto[method];arrayMethods[method] = function (...args) {const result = original.apply(this, args);dep.notify(); // 手动触发更新return result;};
    });
    
3. 性能问题
  • Object.defineProperty 需要递归遍历对象的每个属性,将其转换为响应式数据,这在初始化时会有一定的性能开销。
  • 对于嵌套对象,需要递归监听,性能较差。

Vue 3 的 Proxy 的优势

Vue 3 使用 Proxy 来实现响应式数据,解决了 Vue 2 的许多局限性:

1. 可以监听属性的添加和删除
  • Proxy 可以拦截对象的任意操作,包括属性的添加和删除。

  • 例如:

    const obj = new Proxy({ a: 1 }, {get(target, key) {console.log(`读取属性 ${key}`);return Reflect.get(target, key);},set(target, key, value) {console.log(`设置属性 ${key}${value}`);return Reflect.set(target, key, value);},deleteProperty(target, key) {console.log(`删除属性 ${key}`);return Reflect.deleteProperty(target, key);}
    });obj.b = 2; // 触发 set
    delete obj.a; // 触发 deleteProperty
    
2. 可以监听数组的变化
  • Proxy 可以直接监听数组的变化,无需重写数组方法。

  • 例如:

    const arr = new Proxy([1, 2, 3], {get(target, key) {console.log(`读取数组元素 ${key}`);return Reflect.get(target, key);},set(target, key, value) {console.log(`设置数组元素 ${key}${value}`);return Reflect.set(target, key, value);}
    });arr.push(4); // 触发 set
    
3. 性能更好
  • Proxy 是惰性的,只有在访问属性时才会进行依赖收集,减少了初始化时的性能开销。
  • 对于嵌套对象,Proxy 可以按需监听,性能更好。

Vue 2 和 Vue 3 的对比
特性Vue 2 (Object.defineProperty)Vue 3 (Proxy)
监听属性的添加和删除不支持,需使用 Vue.setVue.delete支持,直接监听
监听数组的变化不支持,需重写数组方法支持,直接监听
性能初始化时需要递归遍历所有属性,性能较差惰性监听,按需收集依赖,性能更好
代码复杂度需要额外处理数组和动态属性代码更简洁,功能更强大
结合代码的梳理
Vue 2 的实现(基于 Object.defineProperty
function observe(obj) {for (const key in obj) {let internalValue = obj[key];let fns = new Set();// 递归监听嵌套对象if (typeof internalValue === 'object' && internalValue !== null) {observe(internalValue);}Object.defineProperty(obj, key, {get() {if (activeFunc) {fns.add(activeFunc);}return internalValue;},set(val) {internalValue = val;// 递归监听新值if (typeof val === 'object' && val !== null) {observe(val);}fns.forEach(fn => fn());}});}
}
Vue 3 的实现(基于 Proxy
function reactive(obj) {return new Proxy(obj, {get(target, key, receiver) {const dep = getDep(target, key);dep.depend(); // 依赖收集const result = Reflect.get(target, key, receiver);// 递归监听嵌套对象if (typeof result === 'object' && result !== null) {return reactive(result);}return result;},set(target, key, value, receiver) {const dep = getDep(target, key);const result = Reflect.set(target, key, value, receiver);dep.notify(); // 派发更新return result;},deleteProperty(target, key) {const dep = getDep(target, key);const result = Reflect.deleteProperty(target, key);dep.notify(); // 派发更新return result;}});
}

总结
  • Vue 2 使用 Object.defineProperty,无法监听属性的添加和删除,也无法直接监听数组的变化,需要通过 Vue.set 和重写数组方法来实现。
  • Vue 3 使用 Proxy,可以监听所有操作(包括属性的添加、删除和数组的变化),性能更好,代码更简洁。
  • Proxy 是 Vue 3 响应式系统的核心,它使得 Vue 3 的响应式系统更加灵活和强大。
http://www.dtcms.com/wzjs/575732.html

相关文章:

  • 贵州省建设执业资格促进会网站常州网站建设联系电话
  • 倒计时网站模板如何提升网站百度权重
  • 360做网站多少钱一年搭建网站备案
  • 山东省建设人才网站公司开个网站多少钱
  • 科右中旗网站建设圣沃建设集团官方网站
  • 石家庄服务大型建站陕西建设系统个人信息查询网站
  • 网站建设教程 迅雷下载网站备案表上面的开办单位写什么
  • 网站建设找哪家公司网站首页设计图片简约
  • 杭州化妆品网站建设卖汽车怎么做网站
  • 威县做网站哪里好江东怎样优化seo
  • 湘潭企业网站建设 p磐石网络开发一个手游需要多少钱
  • 贵州省建设学校网站网站建设常规自适应
  • 哪个网站可以查企业信息安庆市住房和城乡建设局网站首页
  • 湘潭做网站 磐石网络很专业淮安哪里做网站
  • 上饶做网站要多少钱服务器配置
  • 智慧树网站的章节题做不了移动互联网论文
  • 网站建设技术服务合同做网站的一个月能赚多少钱
  • 天河网站建设哪个好wordpress社交模板
  • 广西住房和城乡建设培训中心网站汕头房产网站建设
  • 怎么做网站管理网站免费制作平台
  • 做铁合金用哪个外贸网站好培训机构网站制作
  • 网站上传用什么软件做视频格式开源低代码开发平台
  • 母婴门户网站模板公司做官网要多少钱
  • 企业网站建设合同百度文库中国最新经济新闻
  • 做网站编程要学什么网站开发工具是啥
  • 天创网站青岛网站建设加盟公司
  • 仿互动吧网站源码郑州正规网站制作公司
  • wap网站psd我的建筑网
  • 宜昌市住房和城乡建设厅官方网站优秀网站设计
  • 商城网站建设方案电子版wordpress4.9.6中文版