JavaScript 中原型和构造函数的区别

在 JavaScript 中,prototype(原型)和 constructor(构造函数)是常常被使用到的重要概念。然而,对于这两者之间的差异,许多初学者仍然感到困惑。本篇文章将会详细解释 prototype 和 constructor 的区别并提供示例代码以加深理解。

原型 Prototype

在 JavaScript 中,每个对象都有一个原型(prototype)。原型是一个对象,它包含了一些可供该对象实例继承的属性和方法。当你创建一个新的对象时,该对象会自动从其原型中继承一些通用的属性和方法。

举个例子,我们可以通过以下代码创建一个对象:

----- ------ - -
  ----- --------
  ---- ---
  ------- -
    ------------------- -- ---- -- ------------ --- --- ----------- ----- -------
  -
--

在这个例子中,我们创建了一个名为 person 的对象,并给它添加了三个属性:nameagegreet。由于 person 也是一个对象,因此它自己也有一个原型。默认情况下,所有的对象都继承自一个名为 Object.prototype 的原型对象。

构造函数 Constructor

构造函数是一种特殊类型的函数,它被用来创建一个新的对象。与普通函数不同,构造函数需要使用 new 关键字来调用,从而告诉 JavaScript 这个函数是一个构造函数。当你使用 new 关键字调用一个构造函数时,它会返回一个新的对象,并将该对象的原型设置为构造函数的 prototype 属性。

举个例子,我们可以通过以下代码创建一个构造函数:

-------- ------------ ---- -
  --------- - -----
  -------- - ----
-

---------------------- - ---------- -
  ------------------- -- ---- -- ------------ --- --- ----------- ----- -------
--

在这个例子中,我们创建了一个名为 Person 的构造函数,并给它添加了两个属性:nameage。我们还将 greet 方法添加到了 Person 的原型上。这意味着,当我们使用 new 关键字来调用 Person 构造函数时,它会返回一个新的对象,并将该对象的原型设置为 Person.prototype。这样,我们就可以访问 greet 方法了。

----- ------- - --- --------------- ----
---------------- -- -- ------- -- ---- -- ----- --- --- -- ----- -----

原型与构造函数的联系

原型和构造函数之间有一种重要的联系。当你使用 new 关键字来调用构造函数时,JavaScript 会自动将该对象的原型设置为构造函数的 prototype 属性。这意味着,所有从该构造函数创建的对象都将共享同一个原型。

举个例子,我们可以使用 Person 构造函数来创建两个不同的对象:

----- ------- - --- --------------- ----
----- ------- - --- ------------- ----

------------------------- --- --------------- -- -- ----

在这个例子中,我们创建了两个不同的 Person 对象:person1person2。这两个对象都继承自 Person.prototype 原型,并因此共享了同一个 greet 方法。

总结

在 JavaScript 中,prototype 和 constructor 是两个重要的概念。每个对象都有一个原型,它包含了该对象实例所继承的属性和方法。构造函数是一种特殊类型的函数,它被用来创建一个新的对象,同时也定义了该对象的属性

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/29725