Javascript 为什么要将方法放在类的原型上,而不是在构造函数中声明它们?

Javascript 为什么要将方法放在类的原型上,而不是在构造函数中声明它们?,javascript,node.js,inheritance,prototype,Javascript,Node.js,Inheritance,Prototype,我试图学习更多关于原型继承的知识,但我对向原型添加方法和向实例添加方法之间的区别有点困惑。为什么我要做一件而不是另一件 原型方法: function Foo() {} Foo.prototype.doBar = console.log.bind(console, 'Did bar!'); var foo = new Foo(); foo.doBar(); // prints "Did bar!" 实例方法: function Foo() { this.doBar = console.log

我试图学习更多关于原型继承的知识,但我对向原型添加方法和向实例添加方法之间的区别有点困惑。为什么我要做一件而不是另一件

原型方法:

function Foo() {}
Foo.prototype.doBar = console.log.bind(console, 'Did bar!');
var foo = new Foo();
foo.doBar(); // prints "Did bar!"
实例方法:

function Foo() {
  this.doBar = console.log.bind(console, 'Did bar!');
}
var foo = new Foo();
foo.doBar(); // prints "Did bar!"

将我的方法放在原型上有什么好处?是否曾经有过通过构造函数在实例上声明方法更有意义的时候?

内部也是如此

在编辑之前声明的对象时,可以使用prototype,该对象可能位于外部库或类似的库中

编辑原型比查找原始构造函数声明并在那里修改代码更容易


另外,如果您想使用原始声明并对其进行更改,您可以使用prototype,但不建议使用prototype,最好创建一个不同的“类”以避免混淆。

通过构造函数声明方法会影响性能。对于每个新创建的实例,JS解释器都必须重新读取函数代码


通常,您希望您的构造函数尽可能轻巧,因此最好是始终声明原型方法,而不是通过构造函数

因为它们都是相同的函数。节省内存。2.使用没有实例的方法。我想你的意思是“外部”是一样的,而不是“内部”。原型完全不限于修改先前定义的对象;它们通常用于定义任何类的实例方法,包括您自己定义类的时候。代码在解析脚本时是只读的,以后不再读取。