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

设计网站设计网站wordpress 七牛设置

设计网站设计网站,wordpress 七牛设置,金华网站制作费用,为什么自己做的网站打开是乱码文章目录Vue2 响应式系统设计原理与实现Vue2 响应式系统设计原理与实现 Vue2 的响应式原理主要基于以下几点#xff1a; 使用 Object.defineProperty () 方法对数据对象的属性进行劫持 当数据发生变化时#xff0c;通知依赖该数据的视图进行更新 实现一个发布 - 订阅模式 使用 Object.defineProperty () 方法对数据对象的属性进行劫持 当数据发生变化时通知依赖该数据的视图进行更新 实现一个发布 - 订阅模式包含 Watcher订阅者、Dep依赖收集器等核心概念 创建以下几个核心部分 Observer递归地将数据对象的所有属性转换为响应式 Dep依赖收集器负责收集和通知订阅者 Watcher订阅者当数据变化时执行相应的回调函数 下面我们来简单实现以下 // 依赖收集器类管理某个数据的所有依赖订阅者 class Dep {// 构造函数初始化constructor() {// 存储所有订阅者的数组this.subscribers [];}// 添加订阅者到收集器addSub(sub) {// 检查订阅者是否存在且有update方法if (sub sub.update) {this.subscribers.push(sub);}}// 通知所有订阅者数据已更新notify() {// 遍历所有订阅者并调用其update方法this.subscribers.forEach(sub {sub.update();});} }// 订阅者类代表一个依赖数据变化时执行更新操作 class Watcher {// 构造函数接收Vue实例、属性名和回调函数constructor(vm, key, callback) {this.vm vm; // 存储Vue实例的引用this.key key; // 要监视的数据属性名this.callback callback; // 数据变化时要执行的回调函数this.value this.get(); // 初始化时获取值触发getter完成依赖收集}// 获取数据并将当前订阅者添加到依赖收集器get() {// 将当前订阅者设为Dep的目标标记为当前需要收集的依赖Dep.target this;// 访问数据属性触发其getter从而完成依赖收集const value this.vm[this.key];// 重置Dep.target避免后续操作错误收集依赖Dep.target null;// 返回获取到的值return value;}// 数据变化时执行的更新方法update() {// 获取新值const newValue this.get();// 保存旧值const oldValue this.value;// 只有当新旧值不同时才执行回调if (newValue ! oldValue) {// 更新当前值为新值this.value newValue;// 调用回调函数并将Vue实例作为上下文传入新值和旧值this.callback.call(this.vm, newValue, oldValue);}} }// 将普通对象转换为响应式对象的函数 function observe(data) {// 如果数据不是对象或为null则无需处理if (!data || typeof data ! object) {return;}// 创建观察者实例处理数据return new Observer(data); }// 观察者类负责将对象的所有属性转换为响应式 class Observer {// 构造函数接收需要处理的数据对象constructor(data) {this.data data;// 遍历对象属性并处理this.walk(data);}// 遍历对象的所有属性walk(data) {// 获取对象所有自有属性的键名Object.keys(data).forEach(key {// 为每个属性定义响应式this.defineReactive(data, key, data[key]);});}// 核心方法使用Object.defineProperty定义响应式属性defineReactive(obj, key, val) {// 为当前属性创建一个依赖收集器const dep new Dep();// 如果属性值是对象递归处理使其也成为响应式observe(val);// 使用Object.defineProperty劫持属性的getter和setterObject.defineProperty(obj, key, {enumerable: true, // 允许属性被枚举例如在for...in循环中configurable: true, // 允许属性被配置例如删除属性// 当属性被访问时触发的getterget() {// 如果当前有需要收集的依赖Dep.target存在if (Dep.target) {// 将当前依赖添加到收集器中dep.addSub(Dep.target);}// 返回属性值return val;},// 当属性被修改时触发的setterset(newVal) {// 如果新值和旧值相同则不做处理if (newVal val) {return;}// 更新属性值val newVal;// 如果新值是对象需要将其转换为响应式observe(newVal);// 通知所有依赖当前属性的订阅者数据已更新dep.notify();}});} }// 简化版Vue类整合响应式系统 class Vue {// 构造函数接收配置选项constructor(options) {this.$options options; // 存储配置选项this.$data options.data; // 存储数据对象// 将数据转换为响应式observe(this.$data);// 将data中的属性代理到Vue实例上方便直接访问this.proxyData(this.$data);// 如果有created生命周期钩子执行它if (options.created) {options.created.call(this);}}// 数据代理方法使vm.xxx等价于vm.$data.xxxproxyData(data) {// 遍历data的所有属性Object.keys(data).forEach(key {// 在Vue实例上定义与data属性同名的属性Object.defineProperty(this, key, {// 当访问vm.xxx时返回vm.$data.xxx的值get() {return data[key];},// 当修改vm.xxx时同步修改vm.$data.xxxset(newVal) {data[key] newVal;}});});}// 提供$watch方法用于监视数据变化$watch(key, callback) {// 创建一个新的订阅者关联到指定的属性和回调new Watcher(this, key, callback);} }// 使用示例 const vm new Vue({data: {message: Hello Vue,count: 0,user: {name: John}},created() {console.log(初始化完成:, this.message);} });// 添加监听器当message变化时触发 vm.$watch(message, (newVal, oldVal) {console.log(message变化: ${oldVal} - ${newVal}); });// 添加监听器当count变化时触发 vm.$watch(count, (newVal, oldVal) {console.log(count变化: ${oldVal} - ${newVal}); });// 添加监听器当user.name变化时触发 vm.$watch(user.name, (newVal, oldVal) {console.log(user.name变化: ${oldVal} - ${newVal}); });// 测试数据变化观察是否触发更新 vm.message Hello World; // 触发message的更新 vm.count 1; // 触发count的更新 vm.user.name Jane; // 触发user.name的更新
http://www.pierceye.com/news/366438/

相关文章:

  • php网站开发学什么衡水大型网站建设
  • 广州网站开发软件平台wordpress 问号
  • 西安市建设干部学校网站厦门网站优化服务
  • 深圳市南山区住房和建设局官方网站如何把html网站改为asp网站
  • 网站建设有什么技术做dw网站图片怎么下载地址
  • 初中生如何做网站潍坊网站开发
  • 如何修改用织梦做的网站的模板价格对比网站开发
  • 单位建设网站的作用意义家在深圳坂田业主论坛
  • 网站什么时候备案好宜昌网站建设
  • 那个网站可以查询美做空基金竹中建设官方网站
  • 做直播网站找哪个网站网站平台推广方法
  • 查工程中标信息哪个网站成都网站建设 致尚
  • 做硅胶的网站wordpress googleapis
  • 做网站 简单外包常见的管理信息系统有哪些
  • 做网站一万静海网站开发
  • 视频模板在线制作网站空客德国公司
  • 如何编程制作自己的网站献县做网站价格
  • 成都网站品牌设计设计教育培训
  • 无代码做网站wordpress添加模板后台显示
  • 中山做网站费用国内做网站好的公司
  • 搬瓦工putty做网站建设网站证书
  • 江西网站开发哪家好平面设计主要是做什么的
  • 邱启良 深圳网站建设网站开发 加密存储 解密 二次计算
  • 肥城网站设计公司商务网站要怎么做
  • 做网站的毕设用什么软件统计wordpress
  • 网站备案 游戏易企推
  • 男人做想看的免费网站网页设计有哪些岗位
  • 南江县规划和建设局网站怎样做淘宝客导购网站
  • 浦江县住房和城乡建设局网站校园网站开发方案
  • 微做网站网站开发源代码