哪些原型声明更好,为什么?

时间:2014-03-10 18:06:05

标签: javascript function prototype

我正在尝试决定如何在我的主库的原型中设置我的函数。

我应该使用:

Library.prototype.funcA = function () {.....};
Library.prototype.fucnB = function () {.....};
etc..

Library.prototype = {
    funcA: function () {.....},
    funcB: function () {.....},
    etc..
};

所以基本上第一个选择是将我的所有功能添加到原型中。第二个选项用包含我所有函数的对象替换原型。这有关系吗?

4 个答案:

答案 0 :(得分:5)

我会选择第一个选项。

您不希望完全替换原型,因为您永远不知道从另一个项目添加了什么。

如果它是完全独立的东西,只有你正在处理,第二个是一个好的选择。但它仍然不是一个好习惯,所以你不要无意中吹走其他东西所依赖的功能。

答案 1 :(得分:3)

在这种情况下,不,没关系。它是你的对象,而你并不试图继承任何东西,所以覆盖原型(而不是附加原型)并不重要。

在一般情况下,是的,它可能很重要。你破坏了对象可用的任何现有原型方法。除非您非常确定您的代码拥有相关对象,否则您不应该这样做。相反,在原型中附加方法也需要考虑;其他对象可以与正在修改的原型的对象共享原型。

答案 2 :(得分:3)

这很重要。您必须注意prototype是一个对象。所以你的语句“第二个选项用包含我所有函数的对象替换原型。”是错误的。它只是重置了原型对象。

所以使用:

Library.prototype = {
    funcA: function () {.....},
    funcB: function () {.....},
    etc..
};

速度更快,但是在删除之前删除了每个原型函数:

Library.prototype.funcA

添加属性。

因此,如果你必须添加一个属性(而不是删除一个),请使用:

Library.prototype.funcA

否则,指定一个对象。

答案 3 :(得分:0)

如果Library具有您不想丢失的原型属性/方法,那么您可以通过扩充已经存在的原型来添加它们。否则,这取决于个人喜好。我喜欢第二种方法,因为它看起来更干净,但我在我的代码中都使用过它们。

相关问题