【问题标题】:how to get an array out of a javascript proxy如何从javascript代理中获取数组
【发布时间】:2023-01-26 08:43:25
【问题描述】:

您好我想知道是否有人知道如何在 JavaScript 中从代理的目标值中获取数组。我有这样的事情:

代理人 :
  [[target]] : Array // 我需要提取的数组
  [[处理程序]]:对象
  [[IsRevoked]]:错误

【问题讨论】:

  • 查看 [[handler]] 对象是否公开了任何返回数组的方法。

标签: javascript arrays proxy target


【解决方案1】:

如果您只有对代理的引用,那么您无法(默认情况下)获得代理的目标。一个特定的代理可以提供一种方式(可能通过它的一个陷阱处理程序),但默认情况下没有。

【讨论】:

  • 另外,主观上:大概您的代码已在数组而不是数组本身上获得了代理因为某种原因.提供代理的代码似乎不希望您的代码直接访问数组,因此尝试获得该直接访问(即使您可以)可能是自找麻烦。
  • 您可能是对的,我将研究为我提供代理的代码。我会尽快批准你的回答。
【解决方案2】:

另外,如果处理程序相应地映射所有内容,您可以通过传播获得目标的副本。但是你无法得到原始的[[target]]对象。

const proxy = new Proxy([1, 2, 3], {
  get(target, prop, receiver) {
    return target[prop];
  }
});

console.log([...proxy]);

【讨论】:

  • 请注意,在get方法中需要格外小心,以确保当...访问Symbol.iterator时,它不会意外覆盖Array.prototype[Symbol.iterator]。 (但我想这就是处理程序相应地映射所有内容的意思?)
【解决方案3】:

只需获取原始对象并将其解析为 JSON 或从 JSON 解析,即可获得一个干净的对象!

item = JSON.parse(JSON.stringify(item))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多