javascript:如何捕获对象缺少的函数/属性
假设我有一个旧的/未记录的/缩小的/丑陋的类,我想用我自己的实现替换它。 我如何捕捉新“对象”中可能丢失的所有旧属性 (假设有很多非技术用户使用的客户端脚本(宏)。我想简化缺少func的报告)javascript:如何捕获对象缺少的函数/属性,javascript,Javascript,假设我有一个旧的/未记录的/缩小的/丑陋的类,我想用我自己的实现替换它。 我如何捕捉新“对象”中可能丢失的所有旧属性 (假设有很多非技术用户使用的客户端脚本(宏)。我想简化缺少func的报告) 例如,如果脚本调用Preferences.CurrentPrinter,我希望Preferences对象诊断它缺少CurrentPrinter属性,而用户不必查看控制台,您可能不想做类似的事情,对于不存在的属性,有一个对象返回未定义,这是非常值得依赖的 您可能应该做的只是检查您的首选项。当您需要该功能时,
例如,如果脚本调用Preferences.CurrentPrinter,我希望Preferences对象诊断它缺少CurrentPrinter属性,而用户不必查看控制台,您可能不想做类似的事情,对于不存在的属性,有一个对象返回
未定义
,这是非常值得依赖的
您可能应该做的只是检查您的首选项。当您需要该功能时,成员是否未定义,而不是更改访问器对对象的工作方式。
如果您坚持,您可以实现一个名为
get()
的方法,该方法基于传入的字符串获取属性,并以这种方式执行所有调用
Preferences = {
XDPI:90,
YDPI:90,
*:function(missing_name) {"Tell Joe he forgot to implement " + missing_name+ " property or func"}
}
然后,您不必执行
首选项.varX
而是执行首选项.get(varX)
对于可以使用noSuchMethod的方法,但它只在Firefox中有效
您可以从本帖获得更多信息:
第六版ECMAScript规范为此目的引入了
代理
对象:
但这一点尚未得到广泛支持。在撰写本文时,只有Edge和Firefox浏览器可以这样做:
另外,如果你将来读到这篇文章,并且所有浏览器都已经支持这一点,那你就幸运了:)你不能在Javascript中做到这一点。您应该能够将正在运行的客户端宏包装在一个
try..catch
中,以提供错误报告。的可能重复。从2016年左右开始,您可能正在寻找或寻找可以使用ECMAScript 6的代理。可能的“我的用户”副本是非技术用户,因此他们无法查看控制台,更重要的是,他们无法修复甚至理解现有脚本中的错误(可能会被混淆)。所以,唯一的办法就是猛烈地撞车,但要记录发生了什么,我真幸运!谢谢你,时间旅行者!
Preferences = {
varX=90;
varY=90;
get = function(arg) {
if(typeof this[arg] != 'undefined') {
return this[arg];
}
Console.log("{0} not found in Preferences".format(arg));
};
}