以下两个类实现之间的区别

时间:2018-02-09 05:25:12

标签: javascript

以下两个类实现之间有什么区别

function Animal() {
  this.feed = function () {
  }
}


function Animal () {
}

Animal.prototype.feed = function () {
};

我尝试创建这两个函数,但两者都以类似的方式工作。

2 个答案:

答案 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]]指定其原型。

请查看以下参考链接,其中包含非常好的描述。

https://hackernoon.com/understand-nodejs-javascript-object-inheritance-proto-prototype-class-9bd951700b29

https://www.digitalocean.com/community/tutorials/understanding-prototypes-and-inheritance-in-javascript

https://javascript.info/prototype-inheritance