构造函数模式和原型模式之间的区别
Difference between Constructor pattern and Prototype pattern
所以我试图围绕创建对象的不同方法进行思考。
我遇到了用于创建对象的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中的原型:它是每个对象的共享区域,如果您添加某些内容,那么它随时可用于从同一构造函数创建的所有对象。
原型模式:原型模式是编写构造函数模式的一种增强方式,我们将函数从构造函数移动到构造函数原型。(我们这样做是因为上面构造函数模式中解释的缺点)
现在回到使用初始问题 ==>"你什么时候使用构造函数模式,什么时候使用原型模式?如果我们必须创建没有函数的简单对象,那么构造函数模式很好,但如果有函数,那么原型模式将是有效的方式。
- 全局变量和全局对象的属性之间有什么区别吗
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- JavaScript中的函数和对象之间没有区别吗?
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- 在ember/handlers中使用value和valueBinding有什么区别
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- webpack开发模式和生产构建模式之间有什么区别
- JavaScript 模块模式和它的替代方案有什么区别
- 构造函数模式和原型模式之间的区别
- 使用模块模式和实例化新对象之间的区别
- JavaScript模式-Facade和Object文本模式之间的区别
- 开放阴影DOM封装模式和封闭阴影DOM封装模式有什么区别
- Ajax在MVC模式下GET/POST/PUT/DELETE的区别
- JavaScript 设计模式:模块模式和揭示模块模式之间的区别