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

重庆手机网站建设公司解释网站为什么这样做

重庆手机网站建设公司,解释网站为什么这样做,wordpress管理地址在哪里设置,网站推广需求要素文章目录 1 Proxy代理1.1 get方法1.2 set方法1.3 has方法1.4 this问题 2 Reflect对象2.1 代替Object的某些方法2.2 修改某些Object方法返回结果2.3 命令式变为函数行为2.4 配合Proxy 1 Proxy代理 Proxy如其名,它的作用是在对象和和对象的属性值之间设置一个代理&am…

文章目录

  • 1 Proxy代理
    • 1.1 get方法
    • 1.2 set方法
    • 1.3 has方法
    • 1.4 this问题
  • 2 Reflect对象
    • 2.1 代替Object的某些方法
    • 2.2 修改某些Object方法返回结果
    • 2.3 命令式变为函数行为
    • 2.4 配合Proxy

1 Proxy代理

Proxy如其名,它的作用是在对象和和对象的属性值之间设置一个代理,获取该对象的值或者设置该对象的值, 以及实例化等等多种操作, 都会被拦截住, 经过这一层我们可以统一处理,我们可以认为它就是“代理器”。

ES6之前:

let obj = {}// let arr = [1,2,3] // push pop
// console.log(box)
Object.defineProperty(obj, "data", { // obj--对象,data--属性get(){console.log("get")return box.innerHTML},set(value){console.log("set",value)// 设置 dombox.innerHTML = value}
})console.log(obj)

1.1 get方法

let target = {}
let proxy = new Proxy(target, {get(target, prop){return target[prop]}
})

1.2 set方法

let target = {}
let proxy = new Proxy(target, {get(target, prop){return target[prop]},set(target, prop, value){if(prop === "data"){box.innerHTML = value}target[prop] = value;}
})

1.3 has方法

has捕获器,拦截对象属性的in操作符的调用,当使用in操作符来检查一个属性是否存在于一个对象时,如果对象是个proxy,has捕获器就会被调用。

let target = {_prop: "内部数据"
}
let proxy = new Proxy(target, {get(target, prop) {return target[prop]},set(target, prop, value) {if (prop === "data") {box.innerHTML = value}target[prop] = value;},has(target, key) {if (key[0] === '_') {return false;}return key in target;}
})

1.4 this问题

let target = new Set()
const proxy = new Proxy(target, {get(target, key) {const value =  target[key]// 遇到Function都手动绑定一下this// 正常调用时,this指向proxy// bind修正后,value方法的this指向target对象if(value instanceof Function) {console.log(`访问${value}方法了`)return value.bind(target)// 不能是call / apply,改变页面加载之后就立即执行,同步代码// bind 不会立即执行原函数,异步代码 }return value}
})
proxy.add(1)

Proxy本质上属于元编程非破坏性数据劫持,在原对象的基础上进行了功能的衍生而又不影响原对象,符合松耦合高内聚的设计理念。

2 Reflect对象

Reflect可以用于获取目标对象的行为,它与Object类似,但是更易读,为操作对象提供了一种更优雅的方式。它的方法与Proxy是对应的。

2.1 代替Object的某些方法

const obj = {
};
Reflect.defineProperty(obj, 'name', {value: 'kerwin',writable: false,configurable:false
});

2.2 修改某些Object方法返回结果

// 老写法
try {Object.defineProperty(target, property, attributes);// success
} catch (e) {// fail
}// 新写法
if(Reflect.defineProperty(target, property, attributes)) {// success
} else {// fail
}

2.3 命令式变为函数行为

const obj = {name:"kerwin"
};
//老写法
console.log("name" in obj) //true
//新写法
console.log(Reflect.has(obj, 'name')) //true//老写法
delete obj.name
//新写法
Reflect.deleteProperty(obj, "name")

2.4 配合Proxy

Reflect.set()和Reflect.get()。

let obj = {name:"kerwin"
}Reflect.set(obj, "age", 100)
console.log(Reflect.get(obj, "name"))
let target = new Set()
const proxy = new Proxy(target, {get(target, key) {const value = Reflect.get(target, key)if (value instanceof Function) {console.log(`访问${value}方法了`)return value.bind(target)}return value},set() { // set(target, key, value)return Reflect.set(...arguments)}
})
proxy.add(1)
let arr = [1, 2, 3]
let proxy = new Proxy(arr, {get(target, key) {console.log('get', key)return Reflect.get(...arguments)},set(target, key, value) {console.log('set', key, value)return Reflect.set(...arguments)}
})
proxy.push(4)
// 能够打印出很多内容
// get push     (寻找 proxy.push 方法)
// get length   (获取当前的 length)
// set 3 4      (设置 proxy[3] = 4)
// set length 4 (设置 proxy.length = 4)
http://www.yayakq.cn/news/703712/

相关文章:

  • 网站怎么做页面解析跳转微信公众平台小程序助手
  • 绥化网站建设兼职WordPress如何清空评论
  • 无锡网站的优化学编程课对孩子有什么好处
  • 网站建设教程 第十课 cf战队网站制作教程和源码怎能建设个人网站
  • 网站首页被k多久恢复福建建设执业资格官网
  • 题库网站开发软件技术的就业前景
  • 做时时的网站创作平台有哪些
  • discuz 企业网站网站搭建与服务器配置
  • 顺企网赣州网站建设厦门做网站多少钱
  • 建设银行银监会官方网站怎样免费开网店
  • iis 子网站生活服务网站建设
  • 做机械一般做那个外贸网站网站开发测量像素工具
  • 用vs2010做免费网站模板下载东莞优化排名推广
  • 哈尔滨自助建站网站系统查找5个搜索引擎作弊的网站
  • 济南做网站的公司有哪些利用小偷程序做网站
  • 为什么要建微网站网站app建设需要资源
  • 建站网址大全wordpress插件轮播图
  • 郑州专业的网站公司人事代理网站建设
  • 网站建设策划书(建设前的市场分析)百度竞价镇江
  • 个人做电影网站服务器放国外安全吗电脑版微信
  • 公司怎么做网站页面网站标题怎么修改
  • 免费做电子书的网站越南做网站服务器
  • 网站的弹窗对话框怎么做英文网站建设580
  • 聊城做网站的公司信息网页制作基础教程背景图片
  • 一个人搞得定网站建设做网站设计
  • 自创网站的软件下载企业网站 静态页面
  • 建立网站需要哪些东西南京注册公司流程
  • 南通优普高端网站建设做购实惠网站的意义
  • 公司该建哪种网站免费高清短视频素材库
  • 网站建设是如何寻找客户的wordpress如何添加注册按钮