原型用于声明对象类的属性和方法。使用prototype的一个优点是它保存了内存,因为类的所有实例都指向原型的属性和方法,这些属性和方法保存了内存,并且有效地允许类的所有实例将属性视为静态的。
Prototype通过原型链进行继承。
我的问题很简单。当你可以做的时候,为什么要使用原型:
function car() {
this.engine = "v8";
}
function mustang() {
// nm, no good way to inherit without using prototypes
}是那么回事吗?因此,原型的主要目的有三个:
发布于 2014-01-24 02:38:48
保存内存
是的,当您创建数百个Car实例并且它们都有自己的函数(这些函数有自己的闭包作用域)时,您将消耗更多的内存。
无法找到它的参考,但有人建议Chrome优化使用prototype的构造函数,而不是在构造函数体中使用任何东西的构造函数。
提供静态属性
静态更像Date.now(),每个实例都有来自原型的成员,但是可以在实例上调用。
是引用类型从超类继承的唯一方法。
您可以在Parent.apply(this,arguments);中继承子函数,但它会使扩展父函数变得更加复杂,并且不会使childInstance instanceof Parent成为真。该代码所做的是以要创建的子实例作为调用对象(this)运行父代码。继承通常在两个地方进行。
Parent.apply(this,arguments);重新使用父实例初始化代码,并使父实例成员成为子实例成员(例如: this.name)。Child.prototype=Object.create(Parent.prototype);Child.prototype.constructor=Child;的浅拷贝--这将确保共享父成员在子实例(如函数getName)上可用。下面将更详细地解释这些要点:https://stackoverflow.com/a/16063711/1641941
发布于 2014-01-24 01:54:39
关于你的三点:
jQuery.extend)之类的东西,但就引用类型而言,原型是创建继承的唯一方法。发布于 2014-01-22 13:24:52
原型设计不仅仅是这样。还可以在运行时使用方法和属性扩展类和已经存在的对象实例。
这应该以一种非常容易理解的方式来解释:http://javascript.info/tutorial/inheritance
https://stackoverflow.com/questions/11294623
复制相似问题