【问题标题】:ES6 Proxy logs an unexplainable extra valueES6 代理记录一个无法解释的额外值
【发布时间】:2018-01-04 12:42:38
【问题描述】:

到目前为止,我已经将 ES6 代理理解为一种添加拦截的方式,以允许您向代码添加自定义行为。实现此代码 sn-p 以拦截对数组的推送,但它记录了额外的“被困! 1'后推,我不知道为什么。有谁知道它为什么这样做?这是否意味着陷阱中的代码运行了两次?

const handler = {
  set(target, propertyKey, value, receiver) {
    console.log('trapped!', value);
    return Reflect.set(target, propertyKey, value, receiver);
  }
};

const p = new Proxy([], handler);
p.push('a')

【问题讨论】:

  • 尝试记录propertyKey

标签: javascript ecmascript-6 es6-proxy


【解决方案1】:

它设置长度以及你要推入的数组的索引。这就是为什么每次推送都会运行两次。

let handler = {
  set(target, propertyKey, value, receiver) {
    console.log(`set ${propertyKey} to ${value}`)
    return Reflect.set(target, propertyKey, value, receiver);
  }
};

const p = new Proxy([], handler);
p.push('a')

【讨论】:

  • 是的,这是有道理的。每次按下,第二个记录的数值都会增加一。如果目标是一个数组,有没有办法避免它运行两次?
  • 从您的评论中我刚刚意识到我可以使用 propertyKey 来确保函数中的任何自定义代码都运行一次。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多