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

Difference between Constructor pattern and Prototype pattern

本文关键字:模式 区别 之间 原型 构造函数      更新时间:2023-09-26

所以我试图围绕创建对象的不同方法进行思考。

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

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

构造函数模式

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的构造器只不过是像C++,JAVA这样的面向对象语言所具有的类的实现。

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

原型

JavaScript 缺乏基于类的继承。

在 JavaScript 中实现inheritance,我们使用了用于实现单级继承的Prototype

因此,为了实现JavaScript中的代码可重用性,使用了原型。它只不过是典型的遗传。

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

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

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

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

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