了解JavaScript Error对象

时间:2014-09-17 12:04:25

标签: javascript prototype

我不确定message等属性在Error JavaScript对象上下文中是如何工作的,所以我做了一个测试:

var e = new Error('foo');

console.log(Object.keys(e)); // displays "[]"

现在:

var e = new Error();
e.message = 'foo';
console.log(Object.keys(e)); // displays "['message']"

我认为当一条消息传递给构造函数时,这个字段将属于Error对象原型,但我不知道如果我可以用我的类重现相同的行为。更好地理解:

function C(msg) {
  // **What to write here to make msg belong to the C prototype?**
}

var c = new C('foo');
console.log(Object.keys(c)); // **I would like it to display []**

我的问题是:如何在我的C类中模拟错误消息属性行为?

1 个答案:

答案 0 :(得分:1)

您可以使用Object.defineProperty()来定义不可枚举的属性:

function C(msg) {
    // you an use  enumerable: false  in the third argument, 
    // but it is false by default
    Object.defineProperty(this, "message", { value: msg });
}

var c = new C("hello");

console.log(Object.keys(c).length); // 0
console.log(c.message);             // hello

如果您不关心message是否可以枚举(您的问题不清楚),那么您可以使用这种普通方法:

function C(msg) {
    this.message = msg;
}

var c = new C("hello");

console.log(Object.keys(c).length); // 1
console.log(c.message);             // hello