【发布时间】:2014-10-28 16:42:04
【问题描述】:
在Bugs and Error Handling in Eloquent Javascript的章节中,我找到了以下代码。我想知道为什么作者在原型上设置 name 属性——而不是在构造函数中。
function InputError(message) {
this.message = message;
this.stack = (new Error()).stack;
}
InputError.prototype = Object.create(Error.prototype);
InputError.prototype.name = "InputError";
在整本书中,他一直在定义构造函数中的属性和原型上的方法。 Nicholas Zakas 建议在 Professional Javascript for Web Developers 的第 6 章中这样做,因为,他说,如果您在构造函数中定义方法,那么对构造函数的每次调用都会创建该方法的一个新实例。这当然是相反的情况——在原型上定义了一个属性。
重申一下:我想知道的是,为什么作者会在原型上定义 'name' 属性?
到目前为止,我已经阅读了这两个 SO 帖子,两个都无济于事。
-这告诉我我已经在上面提到的书中读到了什么。
Why defining properties in the prototype is considered an antipattern
-我并没有真正理解这篇文章,但我认为它无关紧要,因为它在谈论其他语言的模式。我关心javascript。
【问题讨论】:
标签: javascript constructor prototype