【问题标题】:Catch access to undefined property in JavaScript [duplicate]在 JavaScript 中捕获对未定义属性的访问 [重复]
【发布时间】:2011-02-14 22:23:26
【问题描述】:

Spider-Monkey JavaScript 引擎为 JavaScript 对象实现 __noSuchMethod__ 回调函数。

每当 JavaScript 尝试执行对象的未定义方法时,都会调用此函数。

我想为一个对象设置一个回调函数,每当访问或分配对象中未定义的属性时,该函数就会被调用。

我还没有找到为 JavaScript 对象实现的 __noSuchProperty__ 函数,如果有任何解决方法可以达到相同的结果,我很好奇。

考虑以下代码:

var a = {};
a.__defineGetter__("bla", function(){alert(1);return 2;});
alert(a.bla);

它等同于[alert(1);alert(2)] - 即使 a.bla 未定义。

我想获得相同的结果,但属性未知(即事先不知道 a."bla" 将是访问的属性)

【问题讨论】:

    标签: javascript language-features


    【解决方案1】:

    在 ECMAScript 的下一个版本中,使用 Object.observe 应该很容易。 在这里阅读更多: http://addyosmani.com/blog/a-few-new-things-coming-to-javascript/

    【讨论】:

    【解决方案2】:

    好的,伙计们,我认为我们需要在 Google V8 问题列表中为这个功能投票,这里是http://code.google.com/p/v8/issues/detail?id=264

    这个很重要的特性好像没有太多关注:(

    【解决方案3】:

    我想为一个对象设置一个回调函数,每当访问或分配对象中未定义的属性时,该函数就会被调用。

    虽然这不是一个详尽的答案,但请记住,为对象的未定义属性赋值是 JavaScript 语言的一个关键特性。

    还要注意 __noSuchMethod__ is a non-standard method,由 Mozilla 的 JavaScript 引擎实现。有一个open feature request 可以在 Google Chrome 的 V8 引擎中实现,但据我所知,其他浏览器不支持。

    截至 2014 年 2 月,It looks like this won't be supported any time soon.

    【讨论】:

    • 感谢您的回答 - 我应该改进我的问题如下:有没有办法在 Spider-Monkey JavaScript 引擎中做同样的事情?
    • @avri: noSuchMethod 在 SpiderMonkey 中受支持,但我怀疑你会找到一个内置方法来捕获分配给未定义属性的尝试,因为这些实际上是语言的特性。
    • 我认为分配给对象的未定义属性是 JavaScript 语言的一个关键特性这一事实并不重要 - 事实上,JavaScript 提供了 defineGetterdefineSetter 方法。考虑以下代码: var a = {}; a.__defineGetter__("bla", function(){alert(1);return 2;});警报(a.bla);它等效于 [alert(1);alert(2)] - 即使 a.bla 未定义。我想获得相同的结果,但属性未知(即事先不知道 a."bla" 将是访问的属性)
    • @avri:你可能想用这个例子来编辑你的问题。我认为它将为您正在寻找的内容提供更好的背景。
    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多