Javascript 这些原型声明中哪一个更好?为什么?
我正在尝试决定如何在我的主库的原型中设置我的函数 我应该使用:Javascript 这些原型声明中哪一个更好?为什么?,javascript,function,prototype,Javascript,Function,Prototype,我正在尝试决定如何在我的主库的原型中设置我的函数 我应该使用: Library.prototype.funcA = function () {.....}; Library.prototype.fucnB = function () {.....}; etc.. 或 所以基本上,第一选择将我的所有功能添加到原型中。第二个选项将原型替换为包含所有my函数的对象。有关系吗?在这种情况下,没有关系。它是您的对象,您不会试图继承任何内容,因此覆盖原型(而不是附加到原型)并不重要 在一般情况下,是的,这
Library.prototype.funcA = function () {.....};
Library.prototype.fucnB = function () {.....};
etc..
或
所以基本上,第一选择将我的所有功能添加到原型中。第二个选项将原型替换为包含所有my函数的对象。有关系吗?在这种情况下,没有关系。它是您的对象,您不会试图继承任何内容,因此覆盖原型(而不是附加到原型)并不重要
在一般情况下,是的,这可能很重要。您正在破坏对象可用的任何现有原型方法。除非您非常确定您的代码拥有所讨论的对象,否则不应该这样做。相反,将方法附加到原型中也需要思考;其他对象可能与您正在修改其原型的对象共享一个原型。如果
库
具有您不想丢失的原型属性/方法,您可能希望通过增加现有原型来添加它们。否则这完全取决于个人喜好。我喜欢第二种方法,因为它看起来更干净,但我在代码中使用了这两种方法。我会选择第一种方法
您不想完全替换原型,因为您永远不知道从另一个项目中添加了什么
如果它是一个完全独立的东西,只有你在做,那么第二个是可以选择的。但这仍然不是一个好习惯,这样你就不会不经意间破坏了一些其他东西所依赖的功能。这很重要。您必须注意,
原型
是一个对象。因此,您的语句“第二个选项将原型替换为包含所有my函数的对象”是错误的。它只是重置了原型对象
因此,使用:
Library.prototype = {
funcA: function () {.....},
funcB: function () {.....},
etc..
};
速度更快,但您删除了分配之前的所有原型函数,同时:
Library.prototype.funcA
正在添加属性
因此,如果必须添加属性(而不是删除属性),请使用:
否则,指定一个对象。请告诉我这个答案有什么不对?有人在疯狂地投反对票。你们这些家伙换帖子太快了,根本跟不上他们:)+1因为原力的平衡很重要。奇怪的是,我觉得这是所有给定答案中最好的答案,特别是原型覆盖部分。在阅读了所有的答案和其他帖子的参考资料后,我同意这是最好的答案。打破原型链或删除原型中的所有内容都只是为了添加我的功能,这毫无意义。我可以看到其中任何一个都可以工作,但我认为保留原始原型并添加到其中更加优雅。谢谢。
var foo=new Library();Library.prototype={bar:function(){alert(1);};foo.bar()如果使用第二种方法,请不要忘记添加constructor
back:Library.prototype={……,constructor:Library}代码>。这是不必要的,但如果设置不正确,那就很奇怪了……OP的成员已经知道.prototype=
覆盖了现有的原型。见问题。
Library.prototype.funcA
Library.prototype.funcA