Javascript 为什么这个属性是在原型上定义的,而不是在构造函数上?

Javascript 为什么这个属性是在原型上定义的,而不是在构造函数上?,javascript,constructor,prototype,Javascript,Constructor,Prototype,在上一章中,我发现了以下代码。我想知道为什么作者在原型上设置name属性,而不是在构造函数中 function InputError(message) { this.message = message; this.stack = (new Error()).stack; } InputError.prototype = Object.create(Error.prototype); InputError.prototype.name = "InputError"; 在整本书中,他一直在

在上一章中,我发现了以下代码。我想知道为什么作者在原型上设置name属性,而不是在构造函数中

function InputError(message) {
  this.message = message;
  this.stack = (new Error()).stack;
}
InputError.prototype = Object.create(Error.prototype);
InputError.prototype.name = "InputError";
在整本书中,他一直在定义构造函数中的属性和原型中的方法。Nicholas Zakas建议Web开发人员在专业Javascript的Ch6中也这样做,因为他说,如果在构造函数中定义方法,那么每次调用构造函数都会创建一个新的方法实例。这当然是相反的情况——在原型上定义一个属性

重申:我想知道的是,为什么作者会在原型上定义“name”属性

到目前为止,我已经读了这两篇文章,两篇都没有用

-这告诉了我我已经在上面提到的书中读到了什么

-我并没有真正理解这篇文章,但我认为它无关紧要,因为它在谈论其他语言的模式。我关心javascript

为什么作者会在原型上定义“name”属性

因为
InputError
的每个实例都共享相同的
名称
。“方法”只是一个口语术语,用于表示具有值(*)函数的属性。通常,应该在实例之间共享这些方法,但在某些情况下(如本例),也可能是数据



*:意思是,属性和方法之间没有区别。

每个
输入者都有相同的名称。在每个新实例中唯一真正需要更改的是
消息
参数。在这种情况下,这并不重要