我不确定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类中模拟错误消息属性行为?
答案 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