首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Trap执行两次- JS代理

设置Trap执行两次- JS代理
EN

Stack Overflow用户
提问于 2022-02-19 19:12:32
回答 1查看 180关注 0票数 1

我在使用js中的代理,但是有些东西是奇怪的=>

代码语言:javascript
复制
let _usernames = [];

_usernames = new Proxy(_usernames, {
  set(target, prop, val) {
    console.count(); //this execute for two times!
    if(typeof val === 'string') {
      target[prop] = val;
      return true;
    } else {
      return false;
    }
  }
});

_usernames.push('Manuel');

当我推到数组时,Set陷阱只应该调用一次,但它执行了两次。

当我推到数组=>时,控制台中出现了一个错误

代码语言:javascript
复制
Uncaught TypeError: proxy set handler returned false for property '"length"'

我怎么才能解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 19:19:45

调用Array#push会使set被调用两次:

  1. target=[],prop=0,val=Manuel:向index
  2. target="Manuel",prop=length添加一个新值,val=1:数组

的更新长度

在这种情况下,第二个调用将返回false,因为长度值是数字的。

一种可能的解决办法:

代码语言:javascript
复制
let _usernames = [];

_usernames = new Proxy(_usernames, {
  set(target, prop, val) {
    console.log(target, prop, val);
    if(typeof val === 'string' || prop === 'length') {
      target[prop] = val;
      return true;
    } else {
      return false;
    }
  }
});

_usernames.push('Manuel');

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71188314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档