以下两个类实现之间有什么区别
function Animal() {
this.feed = function () {
}
}
function Animal () {
}
Animal.prototype.feed = function () {
};
我尝试创建这两个函数,但两者都以类似的方式工作。
答案 0 :(得分:1)
虽然功能相似,但性能肯定会有所不同。在第一种情况下,每次实例化类时都会为对象分配一个新的函数实例,这会对CPU和内存的使用造成影响。第二个版本将函数分配给原型,因此函数对象仅创建一次并且仅分配一次。
答案 1 :(得分:0)
通常,人们认为Javascript不是面向对象的编程语言。
构造函数
function Animal(){
this.feed = function(){
}
}
构造函数自动为新创建的对象设置原型对象。此原型对象存储在ConstructorFunction.prototype属性中。在构造函数中,它将所有属性和方法存储在新对象中。
构造函数是JavaScript的类版本。您会注意到它具有您在功能中所期望的所有功能,但仍然没有返回任何功能。 这个关键字基本上是说每当创建其中一个对象实例时,对象的属性将等于传递给构造函数调用的名称值, feed()方法也将用于构造函数调用。
原型继承
function Animal () {
}
Animal.prototype.feed = function () {
};
原型是用于继承其他功能的机制,但它的工作方式与经典继承不同。 Prototype充当模板,继承属性及其行为方式。 对象原型还有一个原型对象,它继承了核心原型对象的方法和属性。
这称为原型链。 proto ,它是从构造函数的prototype属性派生的。在javascript原型继承中,它实际上不复制对象,但是在对象实例和它的原型之间建立链接
在Prototype继承中,它创建一个类到对象的链接或引用。 每个对象都可以有另一个对象作为其原型。然后前一个对象继承了它的所有原型属性。对象通过内部属性[[Prototype]]指定其原型。
请查看以下参考链接,其中包含非常好的描述。