javascript - ES6 Proxy 记录了无法解释的额外值

标签 javascript ecmascript-6 es6-proxy

到目前为止,我已经将 ES6 代理理解为一种添加拦截的方法,以允许您向代码添加自定义行为。实现此代码片段以拦截对数组的推送,但它记录了额外的额外“被困!”推后 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')

最佳答案

它设置您要推送到的数组的长度和索引。这就是为什么它每次推送都会运行两次。

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')

关于javascript - ES6 Proxy 记录了无法解释的额外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095587/

相关文章:

javascript - 如何检测代理对象中获取序列的结尾?

javascript - 为什么 R Shiny 不接受 jQuery 设置的文本输入?

javascript - JQuery - $.ajax - Firefox 10 超前运行

javascript - 打印时底部的页脚

javascript - 如何从代理数组中删除或插入项目?

javascript - 身份保持膜代理的用例是什么?

javascript - PHP:单击按钮时下载图片并转到其他页面

ReactJS 给出错误 Uncaught TypeError : Super expression must either be null or a function, 未定义

javascript - 这个循环在 Es5/Es6 上如何工作?

javascript - 模板文字和无括号函数调用