Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这些原型声明中哪一个更好?为什么?_Javascript_Function_Prototype - Fatal编程技术网

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