es 中的proxy 调用对象中的方法 ...args

发布于 2022-09-12 04:51:55 字数 731 浏览 23 评论 0

最近在学习es中的proxy代理的操作发现如果我定义了一个对象为:

var phone = { 
    number: 10068, 
    changeNumber(nu) { 
    this.number = number 
                }
    } 

之后再使用Proxy代理

var proxy = new Proxy(phone, {

 get: function (target, key, proxy) {

 var value = target[key];

 if (typeof value === 'function') {

 return function (...args) {

 console.log(`执行 ${key} 方法`);

 return Reflect.apply(value, target, args)

 }

 } else {

 console.log(`读取参数:${key}`);

 return value

 }

 }

})
console.log(proxy.number);//===> 读取参数:number 10068 proxy.changeNumber(1231231233213)//===> 执行 changeNumber 方法

我可以理解代理的为get读取方法,但是不能理解调用方法中的那个...args是怎么传值过去的,希望可以解答一下?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小鸟爱天空丶 2022-09-19 04:51:55

哪来的 ...args,我只看到一个 ...q 啊。

... 是 ES6 新增的展开运算符,这个需要解释吗?

Reflect 也是 ES6 新增的全局对象,跟 Proxy 往往同时出现。你这里的 Reflect.apply(value, target, q) 等价于 Function.prototype.apply.call(value, target, q),你可以理解成简写。至于 Reflect 的其他用处,你可以自行搜索。

至于 Function.prototype.apply,这是最早 JS 里就有的了,用法看这:Function.prototype.apply()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文