【问题标题】:How can I throw an error when an attribute is accessed in JS?在 JS 中访问属性时如何抛出错误?
【发布时间】:2013-05-28 18:00:37
【问题描述】:

如果属性未定义,我希望属性抛出错误,如this question。该问题的每个答案都建议使用 Python 的 @property 装饰器在未定义该字段时引发异常。我如何在 JS 中做到这一点?

编辑:

我希望相当于:

var MyObj = {
  method: function(){
    throw new Error('This method is not implemented');
  }
};

...但更接近:

var MyObj = {
  attribute: throw new Error('This attribute is not defined');
};

【问题讨论】:

    标签: javascript decorator


    【解决方案1】:

    这个问题可以分为两部分,

    var myObj = {}; // just an example, could be a prototype, etc
    

    如何向对象添加不可枚举的属性?

    这是通过Object.defineProperty完成的

    Object.defineProperty(myObj, 'foo', {get: function () {/* see next part */}});
    

    我定义了一个 getter,因此您无需使用() 来调用该函数即可看到错误消息。

    如何抛出错误?

    这就像使用throw 语句一样简单。 JavaScripts 与您要查找的内容最接近的 Error 类型很可能是 ReferenceError

    throw new ReferenceError("Subclasses should implement this!");
    

    【讨论】:

    • 我一直在尝试使用您的解决方案,直到我意识到 Object.defineProperty 不适用于 IE
    • 您需要多远的支持?我认为 IE8 可能有 myObject.__defineGetter__ ,您可以将其用作后备(您必须检查它是否支持它)。这意味着它是可枚举的,但仍可用作吸气剂。如果您想进一步了解历史书籍,那么您将需要一种新的方式来查找您的属性(请参阅here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多