构造函数模式和原型模式之间的区别

时间:2016-01-28 09:42:35

标签: javascript object

所以我试图围绕创建对象的不同方式。

我遇到了用于创建对象的Protoype模式。

现在我在下面写了两个函数,但我看不出两者之间的功能差异是什么?您何时使用构造函数模式以及何时使用Prototype模式?

构造函数模式

function Fruit(){}
Fruit.color = "Yellow",
Fruit.fruitName = "Banana",
Fruit.nativeTo = "SomeValue"

原型模式

function Fruit(){}
Fruit.prototype.color = "Yellow",
Fruit.prototype.fruitName = "Banana",
Fruit.prototype.nativeTo = "SomeValue"

4 个答案:

答案 0 :(得分:15)

组件的可重用性......

构造

当你创建一个新的构造函数时,你将创建一个新的实例,重要的是,对实例所做的任何更改只会影响它们,而不会影响其他实例。

<强>原型

使用原型创建新对象时,它将重用逻辑,对原型链的任何更改都会影响其他所有人。

这是一个很好的解释:Javascript prototypes and instance creation

何时使用每种模式都是基于需求 - 非常模糊的答案,但从来没有这种情况。

想想它们在整个JS中使用的对象,函数,数组,并且它们可以理解它们存在于原型链中,因为我们想要传播它们对它们的任何改变 - 侧面注释:这就是为什么我们应该永远不会改变这些,因为它可以搞砸他们的行为。

最佳解释:JavaScript constructors, prototypes, and the new keyword

答案 1 :(得分:2)

构造

基本上构造函数用于创建具有new运算符的对象。

它用于初始化构造函数的实例属性。因此,带有new的constrctor只不过是面向对象语言的类的实现,如C ++,JAVA所具有的。

每个构造函数都有属性prototype,其中包含对构造函数的引用。

<强>原型

JavaScript缺乏基于类的继承。

在JavaScript中实现inheritance,我们使用Prototype来实现单级继承。

因此,为了在JavaScript中实现代码可重用性,使用了原型。它只不过是原型继承。

在原型继承中,原型上添加的方法或属性可立即用于从相同构造函数创建的对象

答案 2 :(得分:1)

原型属性的更改将适用于包括已存在的所有实例,其中由构造函数创建的属性更改将仅为实例更改

答案 3 :(得分:0)

构造函数模式: 构造器模式是在JS中创建对象的最流行方法之一。 缺点是,对于我们创建的每个对象,都会创建函数副本,这是非常低效的方式。

JS中的原型: 它是每个对象的共享区域,如果您添加一些内容,那么它对于由同一构造函数创建的所有对象都是可用的。

原型模式: 原型模式是编写构造器模式的一种增强方式,其中我们将函数从构造器移到了构造器原型。 (我们这样做是由于上面构造函数模式中解释的缺点)

现在回到使用初始问题==>“何时使用构造函数模式以及何时使用原型模式?” 如果我们必须创建没有函数的简单对象,那么构造函数模式是不错的选择,但是如果有函数,那么原型模式将是一种有效的方法。