42 } proxy = new Proxy(target-6ren">
gpt4 book ai didi

javascript - 无法将 "apply"陷阱设置为代理对象

转载 作者:可可西里 更新时间:2023-11-01 02:32:37 27 4
gpt4 key购买 nike

我创建了一个带有“应用”陷阱的代理对象:

var target = {},
handler = { apply: () => 42 }
proxy = new Proxy(target, handler);
proxy(); // TypeError: proxy is not a function

因此,代理对象应该是可调用的。但是,它不起作用。

为什么?

最佳答案

根据[[Call]] internal method of Proxy objects的定义它应该工作:

但是,有一个问题:并不是所有的 Proxy 对象都有 [[Call]] 方法:

A Proxy exotic object only has a [[Call]] internal method if the initial value of its [[ProxyTarget]] internal slot is an object that has a [[Call]] internal method.

因此,目标必须是一个函数对象:

var target = () => {},
handler = { apply: () => 42 }
proxy = new Proxy(target, handler);
proxy(); // 42

请注意,我使用箭头函数定义了 target 以创建一个不是构造函数的函数对象。这样 Proxy 对象可以被调用但不能被实例化。

如果你也想添加一个“构造”陷阱,目标必须有一个 [[Construct]] 方法,所以用函数声明或函数表达式定义它。

关于javascript - 无法将 "apply"陷阱设置为代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com