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

网站描述应该怎么写成都seo顾问

网站描述应该怎么写,成都seo顾问,霍山网站建设,武夷山网站制作1. 多个对象响应式当前存在的问题:当前实现仅针对某个固定对象(obj)进行依赖收集,实际开发中需要处理多个不同对象将对象响应式处理逻辑抽取为通用函数,支持任意对象代码如下: // 方案一:Obje…

1. 多个对象响应式

    1. 当前存在的问题:当前实现仅针对某个固定对象(obj)进行依赖收集,实际开发中需要处理多个不同对象
    1. 将对象响应式处理逻辑抽取为通用函数,支持任意对象
    1. 代码如下:
         // 方案一:Object.defineProperty  -> Vue2// 多个对象响应式抽取成通用函数function reactive(obj) {Object.keys(obj).forEach(key => {let value = obj[key];Object.defineProperty(obj, key, {set: function(newValue) {value = newValue;const dep = getDepend(obj, key)dep.notify()},get: function() {// 找到对应的obj对象的key对应的dep对象const dep = getDepend(obj, key)// dep.addDepend(reactiveFn)dep.depend()return value;}})})return obj}
      
    1. Vue2实现:
    • 基于Object.defineProperty的响应式系统
    • data返回的对象会被reactive包裹处理
    • 模板编译生成的render函数自动收集依赖

2. Vue3响应式原理(监听对象-Proxy)

  • 2.1. 核心:使用Proxy替代Vue2的Object.defineProperty实现响应式

  • 2.2 与Vue2对比:

    • Vue2需要遍历对象所有属性进行监听,Vue3Proxy可以自动监听整个对象
    • Proxy能捕获更多操作类型(如新增属性、删除属性等)
  • 2.3. 完整代码:

    // 方案二:new Proxy()  -> Vue3 
    function reactive(obj) {const objProxy = new Proxy(obj, {// receiver作用:1. 可以改变操作中的this指向 2. 确保getter/setter中的this指向代理对象set: function(target, key, newValue, receive) {// target[key] = newValueReflect.set(target, key, newValue, receive)const dep = getDepend(target, key)dep.notify()},get: function (target, key, receive) {const dep = getDepend(target, key)dep.depend()return Reflect.get(target, key, receive)}})return objProxy
    }
    

3. Depend类的重构

    1. 重构的点:
    • 使用Set替代数组存储依赖函数,避免重复收集
    • 添加depend方法专门处理依赖收集逻辑
    1. 代码如下:
        class Depend {constructor() {// 使用Set替代数组存储依赖函数,避免重复收集this.reactiveFns = new Set();}addDepend (fn) {if(fn) {this.reactiveFns.add(fn);}}depend () {if(reactiveFn) {this.reactiveFns.add(reactiveFn)}}notify () {this.reactiveFns.forEach(fn => {fn()})}}

4. 完整代码如下:


class Depend {constructor() {// 使用Set替代数组存储依赖函数,避免重复收集this.reactiveFns = new Set();}addDepend (fn) {if(fn) {this.reactiveFns.add(fn);}}depend () {if(reactiveFn) {this.reactiveFns.add(reactiveFn)}}notify () {this.reactiveFns.forEach(fn => {fn()})}
}// 封装一个函数:负责通过obj的key获取对应的Depend对象
const objMap = new WeakMap() // WeakMap弱引用
function getDepend (obj, key) {// 1.根据对象obj,找到对应的map对象let map = objMap.get(obj)if(!map) {map = new Map()objMap.set(obj, map)}// 2.根据key,找到对应的depend对象let dep = map.get(key)if(!dep) {dep = new Depend();map.set(key, dep)}return dep
}// 监听属性变化数据劫持
// 方案一:Object.defineProperty  -> Vue2
// 多个对象响应式抽取成通用函数
// function reactive(obj) {
//   Object.keys(obj).forEach(key => {
//     let value = obj[key];
//     Object.defineProperty(obj, key, {
//       set: function(newValue) {
//         value = newValue;
//         const dep = getDepend(obj, key)
//         dep.notify()
//       },
//       get: function() {
//         // 找到对应的obj对象的key对应的dep对象
//         const dep = getDepend(obj, key)
//         // dep.addDepend(reactiveFn)
//         dep.depend()
//         return value;
//       }
//     })
//   })
//   return obj
// }// 方案二:new Proxy()  -> Vue3 
function reactive(obj) {const objProxy = new Proxy(obj, {// receiver作用:1. 可以改变操作中的this指向 2. 确保getter/setter中的this指向代理对象set: function(target, key, newValue, receive) {// target[key] = newValueReflect.set(target, key, newValue, receive)const dep = getDepend(target, key)dep.notify()},get: function (target, key, receive) {const dep = getDepend(target, key)dep.depend()return Reflect.get(target, key, receive)}})return objProxy
}// 设置一个专门执行响应式函数的一个函数
let reactiveFn = null // 自由变量
function watchFn (fn) {reactiveFn = fnfn()reactiveFn = null 
}//  =================================== 业务代码 =====================================
const obj = reactive({name: 'why',age: 18,address: '长沙市'
})watchFn(function () {console.log(obj.name);console.log(obj.age);
})// 修改obj的属性
console.log('age发生变化时----------------------------------------');
obj.age = 21console.log('user对象----------------------------------------');const user = reactive({nickName: 'abc',level: 100
})watchFn(function () {console.log('nickName: ' ,user.nickName);console.log('level: ' ,user.level);
})user.nickName = 'cba'
http://www.dtcms.com/wzjs/9732.html

相关文章:

  • 做网站建设公司策划推广
  • 石家庄新闻热线电商seo与sem是什么
  • 绿园区住房和城乡建设局网站牛推网
  • 短视频推广的好处seo标题优化关键词怎么选
  • 网站建设用英语怎么说杭州营销策划公司排名
  • 音乐相册制作网站seo排名优化厂家
  • 怎么做挣钱的网站国际军事新闻今日头条
  • 北京做企业网站的公司百度识图找原图
  • 苏州专业做网站的公司有哪些seo外链在线提交工具
  • 阿里网站越秀seo搜索引擎优化
  • 泊头市网站建设浙江专业网站seo
  • 做的网站无法显示此页互联网营销师考试题库
  • 金泉网做网站推广青岛网络推广
  • 苏州公司做网站郑州网络推广公司
  • 易居做网站宁波seo教程app推广
  • 做网站哪种域名好记常用的seo查询工具有哪些
  • 好看的网站首页特效武汉网站搜索引擎优化
  • 四川华鸿建设有限公司网站自己怎么开发app软件
  • 科技有限公司可以做网站建设吗今日网站收录查询
  • 微信用什么小程序可以提取文字站长工具seo综合查询
  • 中山网站建设是什么app推广30元一单平台
  • 长沙网站制作哪家好杭州排名推广
  • 网站建设搜索优化seo诊断工具
  • 专业网站建设哪里好众志seo
  • 深圳企业做网站公产品网络营销推广方案
  • 网站404页面做晚了培训心得体会800字
  • 合肥市网站建设公司推广运营公司哪家好
  • 智慧团建网站网址阿里云万网域名查询
  • o2o新零售系统seo都用在哪些网站
  • 江苏省建设厅网站资质升级雅虎搜索引擎入口