反射是个啥玩意儿?简单来说,就是一堆函数乱七八糟的组合罢了。可是人家功能强大,于是就被人们俗称为“反射”。既然大家都这样叫,我们也不必再纠结其他的名称!那么它到底能派上哪些实际的用场?
你可能觉得 Reflect 没什么大作用!但其实,现在就是把我们平常的操作像(obj.name)这些都变成了函数式操作咯。有什么区别吗?对这样不就能避开那些复杂的专业词汇,使得程序看起来更简单明了!
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.get 咋那么费劲儿!看着像是搞那些动物名字的,实际上直接用 `animal.name` 得了,简单得很呐!懂 JS 的人轻轻松松就搞定了,我就不行,怎么都搞不懂。这不就跟所谓的“语言魔法”一样高大上吗?
那个东西还有其他的玩儿法,看看说明书你就会明白了。还想问下那个“代理”具体啥意思呀?
听说过代理服务器?就是个网络连接中介,通过它上网会更方便。网上的东西要先经过它处理,然后才能到达你那里。嗯对,ES6新版编程里面也有这种手法,就像个小小的魔法师,把各种数据变成你想要的样子,比如说函数、对象啥的。借助这代理,我们就能随心所欲地操纵被代理的对象了!
代理这货有点啥啊? 还能随意更改底层结构,特自由;更棒的是,还能限制别人访问!比如说服务器,就是用来阻挡那些试图闯进来的家伙。简单说来代理就像个小助手,当然了,它比私人助理可方便多了。
我们来弄个 obj 的代理(Agent),第二个参数就决定了 obj 会怎么干。这不就是定规则吗?跟 Reflect 有点像喔!常跟它配对儿的是 Reflect 和 Proxy。
new Proxy(obj, { // 一些规则 })
咱们试试新鲜招数咋样?先设定下sum函数只认得数字,再用反射这一大招进军高手行列;最后加个代理,顺利调用就没那么费劲了。好玩不?
new Proxy(obj, { get(target, prop){ // some code return Reflect.get(target, prop) } })
这篇文章就说到这儿,不知道有木有帮到你们?不过还是别忘了给个点赞再分享出去哟
function sum(num1, num2){ return num1 + num2; }
评论0