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

时间:2013-09-10 23:59:57

标签: javascript

Preferences = {
 XDPI:90,
 YDPI:90,
 *:function(missing_name) {"Tell Joe he forgot to implement " + missing_name+ " property or func"}
}

假设我有一个旧的/未记录的/缩小/ uglified类我想用我自己的实现替换。 我如何能够捕获新“对象”中可能遗漏的所有旧属性?

(假设非技术用户使用了很多客户端脚本(宏)。我想简化丢失功能的报告)

例如,如果脚本调用Preferences.CurrentPrinter我希望Preferences对象诊断它缺少CurrentPrinter属性,而用户不必查看控制台

3 个答案:

答案 0 :(得分:1)

你可能不希望做类似的事情,让一个对象返回undefined来查找不存在的属性,这些东西可以依赖很多东西。

您可能应该做的只是检查当您需要该功能时是否未定义Preferences.member,而不是更改访问者对您的对象的工作方式。


如果你坚持,虽然你可以做的是实现一个名为get()的方法,该方法根据传入的字符串获取属性并以这种方式执行所有调用。

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));
   };
}

然后执行Preferences.varX而不是Preferences.get(varX)

答案 1 :(得分:1)

答案 2 :(得分:0)

第六版ECMAScript规范为此目的引入了Proxy个对象:

http://www.ecma-international.org/ecma-262/6.0/#sec-proxy-objects

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

但目前尚未得到广泛支持。在撰写本文时,只有Edge和Firefox浏览器会这样做:

http://caniuse.com/#feat=proxy

P.S。幸运的是,如果您将来阅读并且所有浏览器都支持:)