这是导致错误的代码:
console.log(objectWithProxyProperty);
我正在处理的错误是,
TypeError: Cannot read property 'apply' of undefined
或
Error: The assertion library used does not have a 'inspect' property or method.
取决于我使用的检查,这在下面的代码中说明。清楚的是,检查'属性被发送到get方法,但是'检查'不是符号而是检查'也无法使用prop in chaiAssert
阅读。
objectWithProxyProperty看起来像:
const objectWithProxyProperty = {};
const assrt = <Partial<AssertStatic>> function () {
try {
return chaiAssert.apply(chaiAssert, arguments);
}
catch (e) {
return handleError(e);
}
};
// the assert property on objectWithProxyProperty is a Proxy
objectWithProxyProperty.assert = new Proxy(assrt, {
get: function (target, prop) {
if (typeof prop === 'symbol') {
return Reflect.get(...arguments);
}
if (!(prop in chaiAssert)) {
return handleError(
// new Error(`The assertion library used does not have property or method.`)
new Error(`The assertion library used does not have a '${prop}' property or method.`)
);
}
return function () {
try {
return chaiAssert[prop].apply(chaiAssert, arguments);
}
catch (e) {
return handleError(e);
}
}
}
});
似乎正在发生的事情是,当我使用名为&#34; assert&#34;的代理属性记录此对象时,代理本身会收到get方法的奇怪属性。
具体来说,这些属性被称为“检查”。和&#39;构造函数&#39;,它们似乎不是符号。
所以我必须要解决问题&#34;是这样添加一个支票:
const objectWithProxyProperty = {};
const assrt = <Partial<AssertStatic>> function () {
try {
return chaiAssert.apply(chaiAssert, arguments);
}
catch (e) {
return handleError(e);
}
};
let badProps = {
inspect: true,
constructor: true
};
objectWithProxyProperty.assert = new Proxy(assrt, {
get: function (target, prop) {
if (typeof prop === 'symbol') {
return Reflect.get(...arguments);
}
if (badProps[String(prop)]) { // ! added this !
return Reflect.get(...arguments);
}
if (!(prop in chaiAssert)) {
return handleError(
// new Error(`The assertion library used does not have property or method.`)
new Error(`The assertion library used does not have a '${prop}' property or method.`)
);
}
return function () {
try {
return chaiAssert[prop].apply(chaiAssert, arguments);
}
catch (e) {
return handleError(e);
}
}
}
});
chaiAssert上不存在的这些属性是什么,但不是符号?
到目前为止,这些幽灵属性一直在检查&#39;和#&#39;构造函数&#39;,但我问这个问题的原因是因为我需要找出可能存在的其他内容,以便我可以提前处理它们!