Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:如何捕获对象缺少的函数/属性_Javascript - Fatal编程技术网

javascript:如何捕获对象缺少的函数/属性

javascript:如何捕获对象缺少的函数/属性,javascript,Javascript,假设我有一个旧的/未记录的/缩小的/丑陋的类,我想用我自己的实现替换它。 我如何捕捉新“对象”中可能丢失的所有旧属性 (假设有很多非技术用户使用的客户端脚本(宏)。我想简化缺少func的报告) 例如,如果脚本调用Preferences.CurrentPrinter,我希望Preferences对象诊断它缺少CurrentPrinter属性,而用户不必查看控制台,您可能不想做类似的事情,对于不存在的属性,有一个对象返回未定义,这是非常值得依赖的 您可能应该做的只是检查您的首选项。当您需要该功能时,

假设我有一个旧的/未记录的/缩小的/丑陋的类,我想用我自己的实现替换它。 我如何捕捉新“对象”中可能丢失的所有旧属性

(假设有很多非技术用户使用的客户端脚本(宏)。我想简化缺少func的报告)


例如,如果脚本调用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));
   };
}