我正在尝试决定如何在我的主库的原型中设置我的函数。
我应该使用:
Library.prototype.funcA = function () {.....};
Library.prototype.fucnB = function () {.....};
etc..
或
Library.prototype = {
funcA: function () {.....},
funcB: function () {.....},
etc..
};
所以基本上第一个选择是将我的所有功能添加到原型中。第二个选项用包含我所有函数的对象替换原型。这有关系吗?
答案 0 :(得分:5)
我会选择第一个选项。
您不希望完全替换原型,因为您永远不知道从另一个项目添加了什么。
如果它是完全独立的东西,只有你正在处理,第二个是一个好的选择。但它仍然不是一个好习惯,所以你不要无意中吹走其他东西所依赖的功能。
答案 1 :(得分:3)
在这种情况下,不,没关系。它是你的对象,而你并不试图继承任何东西,所以覆盖原型(而不是附加原型)并不重要。
在一般情况下,是的,它可能很重要。你破坏了对象可用的任何现有原型方法。除非您非常确定您的代码拥有相关对象,否则您不应该这样做。相反,在原型中附加方法也需要考虑;其他对象可以与正在修改的原型的对象共享原型。
答案 2 :(得分:3)
这很重要。您必须注意prototype
是一个对象。所以你的语句“第二个选项用包含我所有函数的对象替换原型。”是错误的。它只是重置了原型对象。
所以使用:
Library.prototype = {
funcA: function () {.....},
funcB: function () {.....},
etc..
};
速度更快,但是在删除之前删除了每个原型函数:
Library.prototype.funcA
添加属性。
因此,如果你必须添加一个属性(而不是删除一个),请使用:
Library.prototype.funcA
否则,指定一个对象。
答案 3 :(得分:0)
如果Library
具有您不想丢失的原型属性/方法,那么您可以通过扩充已经存在的原型来添加它们。否则,这取决于个人喜好。我喜欢第二种方法,因为它看起来更干净,但我在我的代码中都使用过它们。