这个代理总是在代理上抛出 'set' 是否有原因:trap 为属性 'main' 返回 falsish 但在其他情况下仍然可以完美运行?

ezr*_*zra 1 html javascript data-binding ecmascript-6

我正在使用 javascript 进行一个项目,我正在尝试制作类似 的项目AngularJS,但有点不同,只是为了好玩,因为我认为数据绑定是一个非常酷的想法,并且在正确实施时非常有用。我Proxy定义了一个对象来检测何时发生更改,以及一些处理 HTML 和数据绑定的函数。它正在工作,并将替换如下内容(main = 'hello'):

<div>
  %{ main }%
</div>
Run Code Online (Sandbox Code Playgroud)

有了这个:

<div class = 'binding-0'>
  hello
</div>
Run Code Online (Sandbox Code Playgroud)

如果“main”更改为其他内容,div元素也会更改其值。但是,每当我使用set为全局对象定义的方法来处理在 html 中找到的所有变量时,我都会收到此错误:

Uncaught TypeError: 'set' on proxy: trap returned falsish for property 'main'
    at app.js:112
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?它仍然会做它应该做的事情,但总是抛出这个错误。
这是代码:

<div>
  %{ main }%
</div>
Run Code Online (Sandbox Code Playgroud)
<div class = 'binding-0'>
  hello
</div>
Run Code Online (Sandbox Code Playgroud)

我现在不知道如何在不抛出错误的情况下使其正常工作。我try {} catch (TypeError) {}在不同的地方尝试过,但没有运气。

Nic*_*ick 6

根据MDN 代理文档

set方法应该返回一个布尔值。返回true表示赋值成功。如果 set 方法返回false,并且赋值发生在严格模式代码中,TypeError则会抛出 a 。

您的set方法不返回布尔值(特别是true),因此根据这些文档,您应该在严格模式下获得 TypeError。