在 JavaScript 中,prototype(原型)和 constructor(构造函数)是常常被使用到的重要概念。然而,对于这两者之间的差异,许多初学者仍然感到困惑。本篇文章将会详细解释 prototype 和 constructor 的区别并提供示例代码以加深理解。
原型 Prototype
在 JavaScript 中,每个对象都有一个原型(prototype)。原型是一个对象,它包含了一些可供该对象实例继承的属性和方法。当你创建一个新的对象时,该对象会自动从其原型中继承一些通用的属性和方法。
举个例子,我们可以通过以下代码创建一个对象:
----- ------ - - ----- -------- ---- --- ------- - ------------------- -- ---- -- ------------ --- --- ----------- ----- ------- - --
在这个例子中,我们创建了一个名为 person
的对象,并给它添加了三个属性:name
、age
和 greet
。由于 person
也是一个对象,因此它自己也有一个原型。默认情况下,所有的对象都继承自一个名为 Object.prototype 的原型对象。
构造函数 Constructor
构造函数是一种特殊类型的函数,它被用来创建一个新的对象。与普通函数不同,构造函数需要使用 new
关键字来调用,从而告诉 JavaScript 这个函数是一个构造函数。当你使用 new
关键字调用一个构造函数时,它会返回一个新的对象,并将该对象的原型设置为构造函数的 prototype 属性。
举个例子,我们可以通过以下代码创建一个构造函数:
-------- ------------ ---- - --------- - ----- -------- - ---- - ---------------------- - ---------- - ------------------- -- ---- -- ------------ --- --- ----------- ----- ------- --
在这个例子中,我们创建了一个名为 Person
的构造函数,并给它添加了两个属性:name
和 age
。我们还将 greet
方法添加到了 Person
的原型上。这意味着,当我们使用 new
关键字来调用 Person
构造函数时,它会返回一个新的对象,并将该对象的原型设置为 Person.prototype
。这样,我们就可以访问 greet
方法了。
----- ------- - --- --------------- ---- ---------------- -- -- ------- -- ---- -- ----- --- --- -- ----- -----
原型与构造函数的联系
原型和构造函数之间有一种重要的联系。当你使用 new
关键字来调用构造函数时,JavaScript 会自动将该对象的原型设置为构造函数的 prototype 属性。这意味着,所有从该构造函数创建的对象都将共享同一个原型。
举个例子,我们可以使用 Person
构造函数来创建两个不同的对象:
----- ------- - --- --------------- ---- ----- ------- - --- ------------- ---- ------------------------- --- --------------- -- -- ----
在这个例子中,我们创建了两个不同的 Person
对象:person1
和 person2
。这两个对象都继承自 Person.prototype
原型,并因此共享了同一个 greet
方法。
总结
在 JavaScript 中,prototype 和 constructor 是两个重要的概念。每个对象都有一个原型,它包含了该对象实例所继承的属性和方法。构造函数是一种特殊类型的函数,它被用来创建一个新的对象,同时也定义了该对象的属性
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/29725