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

怎样做电影网站南阳网站关键词

怎样做电影网站,南阳网站关键词,电商设计属于什么设计,wordpress插件源代码在某些时候#xff0c;我们希望定义一些数据是只读的#xff0c;不允许被修改#xff0c;从而实现对数据的保护#xff0c;即为 readonly 只读本质上也是对数据对象的代理#xff0c;我们同样可以基于之前实现的 createReactiveObject 函数来实现#xff0c;可以为此函数… 在某些时候我们希望定义一些数据是只读的不允许被修改从而实现对数据的保护即为 readonly 只读本质上也是对数据对象的代理我们同样可以基于之前实现的 createReactiveObject 函数来实现可以为此函数添加第三个参数 isReadonly如下 function createReactiveObject(value, isShallow false, isReadonly false){}而有了这个参数之后我们还需要对拦截器进行其他操作修改或者删除一个对象的属性都是改变此对象因此我们需要针对这两个进行拦截如下 const noWarnKey [RAW_KEY, IS_REACTIVE, ITERATE_KEY]// set function baseSet(isReadonly) {return function set(target, key, newVal, receiver) {// isReadonly 为 true 时禁止修改而一些内部属性则忽略if (isReadonly !noWarnKey.includes(key)) {// 并弹出警告console.warn(只读属性 , key, 禁止修改)return true}const oldVal target[key]const type Object.prototype.hasOwnProperty.call(target, key) ? TrggerType.SET : TrggerType.ADDconst result Reflect.set(target, key, newVal, receiver)if (!result) returnif (receiver[RAW_KEY] target) {if (!Object.is(oldVal, newVal)) {trigger(target, key, type)}}return result} }// delete function baseDeleteProperty(isReadonly) {return function deleteProperty(target, key) {if (isReadonly !noWarnKey.includes(key)) {console.warn(只读属性 , key, 禁止删除)return true}const hadKey Object.prototype.hasOwnProperty.call(target, key)const result Reflect.deleteProperty(target, key)if (hadKey result) {trigger(target, key, TrggerType.DELETE)}return result} }// get function baseGet(isShallow, isReadonly) {return function get(target, key, receiver) {if (key RAW_KEY) {return target}// 只有当前的对象是一个非只读数据时才需要收集依赖if (!isReadonly) {track(target, key)}const result Reflect.get(target, key, receiver)if (isShallow) return resultif (typeof result object result ! null) {return reactive(result)}return result} }function createReactiveObject(value, isShallow false) {if (typeof value ! object || value null) {console.warn(value 必须是一个对象)return value}if (reactiveMap.has(value)) {return reactiveMap.get(value)}if (isReactive(value)) return valueconst proxy new Proxy(value, {get: baseGet(isShallow),set: baseSet(isReadonly),has,ownKeys,deleteProperty: baseDeleteProperty(isReadonly)})proxy[IS_REACTIVE] truereactiveMap.set(value, proxy)return proxy }function readonly(value) {return createReactiveObject(value, false, true) }现在我们写一段代码进行一下测试 const obj { a: 1 } const r1 readonly(obj) r1.aconsole.log(r1)结果如图 不过目前还存在一个问题目前的只读只能处理成浅响应案例如下 const obj {a: 1,b: {c: 3} } const r1 readonly(obj) r1.b.cconsole.log(r1)测试结果如图 我们虽然在创建 readonly 函数时给 createReactiveObject 的第二个参数是 false表示是深响应的但从结果可以看到没有被拦截而且依然被修改了。 所以按照之前的经验如果要深处理就直接进行递归处理即可所以我们可以进行如下修改 function baseGet(isShallow, isReadonly) {return function get(target, key, receiver) {if (key RAW_KEY) {return target}// 只有当前的对象是一个非只读数据时才需要收集依赖if (!isReadonly) {track(target, key)}const result Reflect.get(target, key, receiver)if (isShallow) return result// 在此处进行递归处理if (typeof result object result ! null) {// 若开启了只读则使用 readonly 函数包装结果实现递归处理每一层return isReadonly ? readonly(result) : reactive(result)}return result} }我们在使用之前的测试案例执行 r1.b.c 来查看一下结果如图 而如果要实现浅响应那就更加简单了如下 function shallowReadonly(value) {// 只需要将 isShallow 设置为 true 即可表示只处理第一层// - 设置 isShallow 为 true 后在 get 中就会直接返回这个属性的原有的值不做代理、只读或者其他处理return createReactiveObject(value, true, true) }
http://www.w-s-a.com/news/587971/

相关文章:

  • 兰州网站建设论坛四川建设网官网登录
  • 在线作图免费网站湖南批量出品机
  • 深圳做网站公司有哪些地方妇联加强网站平台建设
  • vps建设网站别人访问不了网页链接生成器
  • 网站建设一般要多少钱电商平台取名字大全
  • 怎么做网站封面上的图网站开发语言 微信接口
  • 免费观看网站建设优化安徽
  • 上海电商网站开发公司做婚恋网站的翻译好吗
  • 以网站建设为开题报告大数据技术就业前景
  • dw做网站字体 别人电脑显示青岛活动策划公司
  • 网站成立时间查询墨猴seo排名公司
  • 技术支持 随州网站建设苏州企业网站建设定制
  • 美食网站开发目的与意义网站开发环境选择
  • 青岛西海岸新区城市建设局网站开发板在null不可用
  • 企业信息管理系统免费seo优化个人博客
  • 做任务的设计网站泰州哪里做网站
  • 什么网站可以做设计赚钱吗南京十大软件公司排名
  • 网站开发时间进度北京有哪些著名网站
  • 深圳比较好的设计网站公司自己的网站到期域名如何续费
  • 温州做网站哪儿新云网站模版
  • 网站开发 视频存在哪检察院前期网站建设
  • 备案中的网站信息怎么填如何做分享赚钱的网站
  • 网站行程表怎么做注册公司费用要多少
  • 常见电子商务网站基本模式南山网站公司定
  • 网站搭建代码网站里面送礼物要钱怎么做代码
  • 大学英文网站建设举措wordpress 学院 模板
  • 爱 做 网站吗php网站作业模版
  • wordpress代码乱吗台州做网站seo的
  • 做ptt网站wordpress中文企业网站
  • 深圳雨棚制作深圳 网站优化公司排名