构造函数、原型与原型链

在JavaScript中,每个对象都有一个[[Prototype]]内部属性,它指向另一个对象,该对象称为原型。每个构造函数(除Object以外)都有一个prototype属性,其中包含一个指向构造函数原型的对象引用。通过使用构造函数和原型,我们可以实现面向对象编程的特性。

构造函数

构造函数是一种创建对象的特殊函数。它被用于创建具有相同属性和方法的对象。在构造函数函数体内,使用this关键字来引用新创建的对象。构造函数通常以大写字母开头,以便与其他函数区分开来。

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

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

在上面的例子中,Person是一个构造函数。它接受两个参数,name和age,并将它们保存为新创建对象的属性。通过调用new操作符并传递所需的参数,我们可以创建一个新的Person对象。

原型

原型是一个对象,用于存储共享方法和属性。每个JavaScript对象都有一个原型对象。当我们尝试访问对象中不存在的属性或方法时,JavaScript会查找原型对象是否存在该属性或方法。如果原型对象中存在该属性或方法,则它将使用该属性或方法。

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

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

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

在上面的例子中,我们向Person的原型对象添加了一个属性nationality。当我们创建一个新的Person实例时,它会从原型继承nationality属性并且值为'American'。

原型链

原型链是一种将多个对象链接在一起的方式。每个JavaScript对象都有一个[[Prototype]]内部属性,用于指向其原型对象。原型对象本身也是JavaScript对象,并且也有自己的[[Prototype]]内部属性。因此,可以通过一系列原型对象的链接来访问所有对象的属性和方法。

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

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

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

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

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

在上面的例子中,我们创建了一个名为Student的构造函数,它继承了Person构造函数的属性和方法。我们使用Object.create()方法设置Student的原型对象为Person的原型对象,这样Student实例就可以访问Person的属性和方法。我们还将Student.prototype.constructor设置为Student本身,以确保它指向正确的构造函数。

总结

构造函数、原型和原型链是JavaScript面向对象编程的重要概念。通过使用它们,我们可以创建具有共享属性和方法的对象,并在不同层次上继承属性和方法。深入理解这些概念对于编写高质量的JavaScript代码至关重要。

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