所有分类
  • 所有分类
  • 后端开发
反射:JS语言魔法解密!代理到底有何玄机?

反射:JS语言魔法解密!代理到底有何玄机?

因为它能做的事情,和其他语言(Java、python等)中的反射很相似。其他语言中都叫做反射了,那就共鸣(降低学习成本?想必大家已经对反射有一定了解了,Reflect对象上还有一些其他方法。确实反射经常配合Proxy使用使用反射我们可以实现

反射是个啥玩意儿?简单来说,就是一堆函数乱七八糟的组合罢了。可是人家功能强大,于是就被人们俗称为“反射”。既然大家都这样叫,我们也不必再纠结其他的名称!那么它到底能派上哪些实际的用场?

你可能觉得 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新版编程里面也有这种手法,就像个小小的魔法师,把各种数据变成你想要的样子,比如说函数、对象啥的。借助这代理,我们就能随心所欲地操纵被代理的对象了!

反射:JS语言魔法解密!代理到底有何玄机?

代理这货有点啥啊? 还能随意更改底层结构,特自由;更棒的是,还能限制别人访问!比如说服务器,就是用来阻挡那些试图闯进来的家伙。简单说来代理就像个小助手,当然了,它比私人助理可方便多了。

我们来弄个 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;
}

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/03/11325.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?