Javascript 的新代理功能为调试提供了一些有趣的功能。例如,您可以通过将对象放在代理后面来“保护”一个对象,get
如果您访问未定义的属性,则该处理程序会抛出该处理程序。这有助于发现拼写错误和其他类型的错误。
这可以像这样使用:
class Something {
constructor()
{
this.foo = "bar";
allObjects.push(this);
}
};
function defend(o)
{
return new Proxy(o, DebugCheckHandler);
};
let rawSomething = new Something();
let defendedSomething = defend(rawSomething);
可以认真编写代码以仅处理defendedSomething
. 然而在这个例子中,Something
构造函数传递this
到其他地方(到allObjects
)。这最终rawSomething
与defendedSomething
在代码库中同时使用两者具有相同的效果。
然后,代理引用不等于其原始引用这一事实会出现问题,因为rawSomething !== defendedSomething
. 例如,allObjects.includes(defendedSomething)
如果包含 ,将返回 false rawSomething
,因为includes
会进行严格===
检查。
有没有一种很好的方法来解决这个问题而无需对代码进行太多更改?