什么是原型,原型链?原型链是如何实现的?(带图清晰理解)
时间: 2024-06-09 22:07:32 浏览: 105
在 JavaScript 中,每个对象都有一个原型对象,它充当对象的模板或蓝图,用于继承属性和方法。原型对象可以包含属性和方法,这些属性和方法可以被继承到它的后代对象中。
原型链是一种机制,它通过将一个对象的原型设置为另一个对象来实现继承。这种机制允许我们在一个对象中访问另一个对象的属性和方法。当我们试图访问一个对象的属性或方法时,JavaScript 引擎会先查找该对象本身是否拥有该属性或方法,如果没有,则会沿着原型链向上查找,直到找到一个拥有该属性或方法的对象为止。
下面是一个带图清晰理解原型和原型链的示例:
![原型链示意图](https://img-blog.csdn.net/20171019160118755?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWljaGFlbC82NzAzMTU1Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/50)
在上图中,我们创建了一个 `Person` 构造函数,并设置了它的原型对象 `Person.prototype`。然后,我们创建了一个 `person1` 对象,并将其原型设置为 `Person.prototype`。这意味着 `person1` 继承了 `Person.prototype` 对象中的属性和方法。同样,我们创建了一个 `person2` 对象,并将其原型设置为 `Person.prototype`。因此,`person2` 也继承了 `Person.prototype` 对象中的属性和方法。
现在,假设我们试图访问 `person1` 对象的 `name` 属性。JavaScript 引擎首先会查找 `person1` 对象本身是否有 `name` 属性,如果没有,它会沿着原型链向上查找,直到找到 `Person.prototype` 对象为止。在这个例子中,我们可以看到 `person1` 对象的原型是 `Person.prototype` 对象,而 `Person.prototype` 对象中有一个名为 `name` 的属性,因此引擎会返回 `Person.prototype` 对象中的 `name` 属性值。
同样,如果我们试图访问 `person2` 对象的 `sayHello` 方法,JavaScript 引擎会首先查找 `person2` 对象本身是否有 `sayHello` 方法,如果没有,它会沿着原型链向上查找,直到找到 `Person.prototype` 对象为止。在这个例子中,`person2` 对象的原型是 `Person.prototype` 对象,而 `Person.prototype` 对象中有一个名为 `sayHello` 的方法,因此引擎会调用 `Person.prototype` 对象中的 `sayHello` 方法。
这就是原型和原型链的基本概念,它们是 JavaScript 中实现继承的核心机制。
阅读全文