繁体   English   中英

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

[英]Difference between Constructor pattern and Prototype pattern

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

我开始使用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"

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

构造函数

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

原型

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

这是一个很好的解释: Javascript原型和实例创建

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

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

这里有最好的解释: JavaScript构造函数,原型和new关键字

构造函数

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

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

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

原型

JavaScript缺乏基于类的继承。

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

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

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

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

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

JS中的原型:它是每个对象的共享区域,如果你添加一些东西,那么它就可以用于从同一个构造函数创建的所有对象。

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

现在回来使用初始问题==>“你什么时候使用构造函数模式,何时使用Prototype模式?” 如果我们必须创建没有函数的简单对象,那么构造函数模式是好的,但如果有函数,那么Prototype模式将是有效的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM