反射:Reflect
反射到底是个什么东西?
它的本质就是一个对象(JS内置的),里边有一些函数可供调用。
为什要叫做反射?
因为它能做的事情,和其他语言(Java、python等)中的反射很相似。其他语言中都叫做反射了,那就共鸣(降低学习成本?)
反射能做什么事情呢?
let animal = { name: "dog", age: 3 } Reflect.get(animal, "name") // 传参为:对象, 属性名 // 等同于: animal.name let say = function (type, sound) { console.log(`${type}的叫声是${sound}`) } Reflect.apply(say, null, ["猫", "喵喵"]) // 传参为:函数, this指向, 实参列表 // 等同于: say("猫", "喵喵")
经过以上代码我们深刻的发现Reflect好像没什么用,非要说些什么的话,他把我们以前的基本操作(比如:obj.name)用调用函数的方式实现了一遍。对了这就是它的意义:减少JS语言魔法,让代码更加纯粹。
怎么说?
JS语言魔法:我们的操作看起来不太合理,超乎寻常,难以解释。
解释一波,Reflect.get(animal, "name")你看着个代码它又宽又长,看着好像我们要得到 animal 这个对象中 name 这个属性的值的意思。
再看看animal.name 震惊!只需要这样,就得到了对象中的属性的值,虽然学习过JS的伙伴们觉得很正常,但是我们不太能用语言去描述这段代码做了什么,这就是语言魔法的意思。
想必大家已经对反射有一定了解了,Reflect对象上还有一些其他方法。大家可以看文档研究一下怎么用,
代理:Proxy
代理到底是个什么东西?
我们都听过什么代理商、还有代理服务器之类的。比如哪代理服务器来说,我们不能直接访问到服务器,我们必须要去访问代理服务器,由代理服务器代替我们去访问服务器,服务器返回的数据,也要先返回给代理服务器,再由代理服务器返回给我们。
ES6中的代理也是这个意思,我们可以去代理一个对象类型的数据(函数、对象等),然后我们再去访问对象时,访问代理就好了。
为啥我们要访问代理?
因为代理对象给我们提供了修改底层实现的方式,也就是说我们可以在代理对象上进行一些操作,为我们访问对象制定一些规则。就像代理服务器可以过滤某些对服务器的访问等功能。
怎么操作?
Proxy的本质是一个构造函数,
new Proxy(obj, { // 一些规则 })
这样我们就构造出了一个obj对象的一个代理对象,第二个参数是一个对象它为访问obj对象制定了一些规章制度。
new Proxy(obj, { get(target, prop){ // some code return Reflect.get(target, prop) } })
这就是在创建代理对象是制定规则的场景,对比一下Reflect,是不是很想呢。确实反射经常配合Proxy使用
应用:
比如:
function sum(num1, num2){ return num1 + num2; }
现在我们为sum函数的传参制定一些规则:参数必需是number类型的
const sunProxy = new Proxy(sum, { apply(target, thisArgument, arguments) { arguments.forEach(item => { typeof item !== "number" && throw("参数类型非number") }) return Reflect.apply(target, thisArgument, arguments) } }) sunProxy(23, 32)
封装一下,搞一个通用类型出来
function funcProxy(func, ...types) //执行完这个函数返回一个函数的代理,剩余参数是我们规定的传参类型 return new Proxy(func, { apply(target, thisArgument, argumentsList) { types.forEach((type, index) => { // 循环判断每一项参数类型是否合法 typeof argumentsList[index] !== type && throw("传参类型不符合") } }) return Reflect.apply(target, thisArgument, argumentsList); } }) }
然后:
const sumProxy = funcProxy(sum, "number", "number") sumProxy(3, 5);
使用反射我们可以实现一些底层操作,代理可以为我们的调用制定规则。
是不是很有趣呢大家。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]