0

我很好奇这两种使用原型编写 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() {};

澄清这一点的任何帮助将不胜感激!谢谢 -

4

2 回答 2

3

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

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

于 2013-04-28T19:46:40.680 回答
1

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

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

function Klass() {}

那么还有一个区别是,第二种方法可以在函数声明之前和之后使用,例如:

Klass.prototype.propertyA = 20;
Klass.prototype.methodA = function() {};

function Klass() {}

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

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

于 2013-04-28T20:01:06.933 回答