在JavaScript实例上编写单个原型和使用多个原型之间的区别?只是风格

Difference between writing a single prototype on a JavaScript instance and using multiple? Just style?

本文关键字:原型 之间 区别 风格 实例 JavaScript 单个      更新时间:2023-09-26

我很好奇这两种使用原型编写JavaScript函数的方式有什么不同。在许多JS风格指南中,后者比前者更受欢迎,但由于DRY原则,我发现后者有些多余。这只是一个风格问题吗?一个版本比另一个更快吗?是我遗漏了什么明显的东西吗?:

保持干燥?

var Klass = function() {}
Klass.prototype = {
   propertyA: 20,
   propertyB: "hey there",
   methodA: function() {},
   methodB: function() {},
}

通常在样式指南中推荐:

var Klass = function() {}
Klass.prototype.propertyA = 20;
Klass.prototype.propertyB = "hey there";
Klass.prototype.methodA = function() {};
Klass.prototype.methodB = function() {};

任何帮助澄清这将是感激的!谢谢——

第一个示例将prototype完全替换为对象的内容;第二个是在不破坏现有数据的情况下设置单个属性。

您可以使用extend的某些版本将该对象合并到原型中,从而使第一个示例像第二个示例一样工作。

唯一的区别是第一个方法替换了原型,而不是添加到原型中。如果您在将函数赋值给变量后立即执行此操作,则没有实际区别。

如果您使用常规函数而不是将函数表达式赋值给变量,即:

function Klass() {}

则第二个方法可以在函数声明之前和之后使用,例如:

Klass.prototype.propertyA = 20;
Klass.prototype.methodA = function() {};
function Klass() {}
Klass.prototype.methodB = function() {};
Klass.prototype.propertyB = "hey there";

如果你替换了原型对象,你只能在之前或之后声明,所以原型方法仍然在一个地方。