【发布时间】:2020-03-03 19:15:03
【问题描述】:
我正在编写类似于以下 sn-p 的代码:
let arr = [];
let arr_handlers = {
set: function(target, property, value, receiver) {
console.log('setting ' + property + ' for ' + target + ' with value ' + value);
target[property] = value;
return true;
}
};
let arr_proxy = new Proxy(arr, arr_handlers);
arr_proxy.push(1);
// setting 0 for with value 1
// setting length for 1 with value 1
arr_proxy[1] = 5;
// setting 1 for 1 with value 5
console.log(arr.length);
// 2
问题是当我使用arr_proxy.push() 和通过索引设置值时代理的行为不同:
当数组值由索引设置时,为什么不调用代理设置器来设置长度?
【问题讨论】:
-
您的数组只有一项,但您在索引 3 上设置了一项。这会将数组转换为稀疏数组,不会更新长度。我在规范中找不到这个。
-
@Amy 如果我在索引 1 上设置一个项目,它的行为方式相同。我已经更新了问题
-
是的,我的分析/结论是错误的。我不知道。我会留下我的评论,这样其他人就不会过来说同样的话。
标签: javascript